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 10 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
Python BS4库的安装与使用详解
Aug 08 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
python:动态路由的Flask程序代码
Nov 22 Python
python pygame实现球球大作战
Nov 25 Python
Python任务调度利器之APScheduler详解
Apr 02 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
python-for x in range的用法(注意要点、细节)
May 10 Python
Python编写冷笑话生成器
Apr 20 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 md5下16位和32位的实现代码
2008/04/09 PHP
php数组一对一替换实现代码
2012/08/31 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
webpack3之loader全解析
2017/10/26 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
Python中的ctime()方法使用教程
2015/05/22 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
python全栈开发语法总结
2020/11/22 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
班级道德讲堂实施方案
2014/02/24 职场文书
食品安全承诺书范文
2014/08/29 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
员工升职自荐信
2015/03/27 职场文书
家长通知书家长意见
2015/06/03 职场文书
小学校园广播稿
2015/08/18 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书