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 多线程应用介绍
Dec 19 Python
详解Django通用视图中的函数包装
Jul 21 Python
基于python的Tkinter编写登陆注册界面
Jun 30 Python
python函数中return后的语句一定不会执行吗?
Jul 06 Python
python爬取淘宝商品详情页数据
Feb 23 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
Django 创建/删除用户的示例代码
Jul 24 Python
python字符串的拼接方法总结
Nov 18 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
Django实现翻页的示例代码
May 24 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
Python递归函数特点及原理解析
2020/03/04 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
新闻网站实习自我鉴定
2013/09/25 职场文书
应届生如何写自荐信
2014/01/05 职场文书
《观舞记》教学反思
2014/04/16 职场文书
创先争优标语
2014/06/27 职场文书
弄虚作假心得体会
2014/09/10 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书