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的闭包和装饰器
Feb 26 Python
python九九乘法表的实例
Sep 26 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
python中format()函数的简单使用教程
Mar 14 Python
python+pandas分析nginx日志的实例
Apr 28 Python
python实现自动登录
Sep 17 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
六种酷炫Python运行进度条效果的实现代码
Jul 17 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 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
FCKeditor添加自定义按钮
2008/03/27 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
jquery 图片轮换效果
2010/07/29 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
jQuery简单实现title提示效果示例
2016/08/01 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python快速排序算法实例分析
2017/11/29 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Python matplotlib实时画图案例
2020/04/23 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
python实现图片素描效果
2020/09/26 Python
python安装sklearn模块的方法详解
2020/11/28 Python
python 通过exifread读取照片信息
2020/12/24 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
Ajax主要包含了哪些技术
2014/06/12 面试题
营销专业应届生求职信
2013/11/26 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
学校宣传标语
2014/06/18 职场文书
假期安全教育广播稿
2014/10/04 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
测量员岗位职责
2015/02/14 职场文书
团员个人总结
2015/02/26 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python