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 中整型对象存储的位置
May 16 Python
python中模块的__all__属性详解
Oct 26 Python
Python基于dom操作xml数据的方法示例
May 12 Python
python对视频画框标记后保存的方法
Dec 07 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
Python实现打印实心和空心菱形
Nov 23 Python
python wxpython 实现界面跳转功能
Dec 17 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
解决c++调用python中文乱码问题
Jul 29 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
Python实现手势识别
Oct 21 Python
tensorflow中的梯度求解及梯度裁剪操作
May 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
PHP与SQL注入攻击[二]
2007/04/17 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
destoon二次开发入门示例
2014/06/20 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
js正确获取元素样式详解
2009/08/07 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
token 机制和实现方式
2020/12/15 Javascript
Django入门使用示例
2017/12/12 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
Python File(文件) 方法整理
2019/02/18 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
python 实现多维数组转向量
2019/11/30 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
自动化专业职业生涯规划书范文
2014/01/16 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
2016新年感言
2015/08/03 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
win7配置本地ftp服务器的图文教程
2022/08/05 Servers