python内存管理机制原理详解


Posted in Python onAugust 12, 2019

python内存管理机制:

  • 引用计数
  • 垃圾回收
  • 内存池

1. 引用计数

当一个python对象被引用时 其引用计数增加 1 ; 当其不再被变量引用时 引用计数减 1 ; 当对象引用计数等于 0 时, 对象被删除(引用计数是一种非常高效的内存管理机制)

2. 垃圾回收

垃圾回收机制: ① 引用计数 , ②标记清除 , ③分带回收

引用计数 :

引用计数也是一种垃圾收集机制, 而且也是一种最直观, 最简单的垃圾收集技术.当python某个对象的引用计数降为 0 时, 说明没有任何引用指向该对象, 该对象就成为要被回收的垃圾了.(如果出现循环引用的话, 引用计数机制就不再起作用了)

标记清除 :

如果两个对象的引用计数都为 1 , 但是仅仅存在他们之间的循环引用,那么这两个对象都是需要被回收的, 也就是说 它们的引用计数虽然表现为非 0 , 但实际上有效的引用计数为 0 ,.所以先将循环引用摘掉, 就会得出这两个对象的有效计数.

分带回收 :

从前面“标记-清除”这样的垃圾收集机制来看,这种垃圾收集机制所带来的额外操作实际上与系统中总的内存块的数量是相关的,当需要回收的内存块越多时,垃圾检测带来的额外操作就越多,而垃圾回收带来的额外操作就越少;反之,当需要回收的内存块越少时,垃圾检测就将比垃圾回收带来更少的额外操作。

3.内存池

内存池机制: python 中分为大内存和小内存: 256k为界限

大内存使用malloc 进行分配

小内存使用内存池是进行分配

python的内存池金字塔:

第3层: 最上层, 用户对python对象的直接操作

第1层和第2层: 内存池, 有python 的 接口函数 PyMen_Malloc 实现, 若请求分配的内存在1 - 256字节之间就使用内存池进行分配, 调用malloc 函数分配内存, 但是每次只会分配 256 k 的内存. 不会调用free 函数释放内层. 将该内存块留在内存池中便下次使用

第 0 层: 大内存 . 若请求分配的内存大于 256 k , malloc函数分配, free函数释放内存

第 - 1 -2 层: 操作系统进行操作

python内存管理机制原理详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
详解django.contirb.auth-认证
Jul 16 Python
学生信息管理系统Python面向对象版
Jan 30 Python
python redis 删除key脚本的实例
Feb 19 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
Python函数装饰器原理与用法详解
Aug 16 Python
python爬虫增加访问量的方法
Aug 22 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
Python 过滤错误log并导出的实例
Dec 26 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
python实现高斯投影正反算方式
Jan 17 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 #Python
python实现图片压缩代码实例
Aug 12 #Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 #Python
一行Python代码过滤标点符号等特殊字符
Aug 12 #Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 #Python
Django认证系统实现的web页面实现代码
Aug 12 #Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 #Python
You might like
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP学习记录之数组函数
2018/06/01 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
JS实现六位字符密码输入器功能
2016/08/19 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
Django实现单用户登录的方法示例
2019/03/28 Python
python实现日志按天分割
2019/07/22 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
让IE支持HTML5的方法
2012/12/11 HTML / CSS
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
个人简历的自荐信
2013/10/23 职场文书
货车司机岗位职责
2014/03/18 职场文书
毕业横幅标语
2014/10/08 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
2015年暑假工作总结
2015/07/13 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
python blinker 信号库
2022/05/04 Python