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的re模块正则表达式操作
May 25 Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
Python实现搜索算法的实例代码
Jan 02 Python
python实现高斯投影正反算方式
Jan 17 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
怎么快速自学python
Jun 22 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
Python的Tqdm模块实现进度条配置
Feb 24 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 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
笑谈配置,使用Smarty技术
2007/01/04 PHP
php购物网站支付paypal使用方法
2010/11/28 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
jQuery getJSON()+.ashx 实现分页(改进版)
2013/03/28 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
python实现感知器算法详解
2017/12/19 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
大二学习计划书范文
2014/04/27 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
2014年项目工作总结
2014/11/24 职场文书
道歉的话语大全
2015/05/12 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
报案材料怎么写
2015/05/25 职场文书
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js