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中装饰器的使用
Jul 12 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
详解Python3中字符串中的数字提取方法
Jan 14 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
基于python实现聊天室程序
Jul 27 Python
使用python serial 获取所有的串口名称的实例
Jul 02 Python
对Django外键关系的描述
Jul 26 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
python类中super() 的使用解析
Dec 19 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 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
PHP实现用户登录的案例代码
2018/05/10 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
JS实现拼图游戏
2021/01/29 Javascript
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
python实现多线程网页下载器
2018/04/15 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
python文件和文件夹复制函数
2020/02/07 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
大学自荐信
2013/12/12 职场文书
表彰先进集体通报
2014/01/12 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
关于倡议书的范文
2015/04/29 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python