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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
python字符串的方法与操作大全
Jan 30 Python
PyQt5每天必学之事件与信号
Apr 20 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
Python threading.local代码实例及原理解析
Mar 16 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
jupyter notebook的安装与使用详解
May 18 Python
利用python 下载bilibili视频
Nov 13 Python
Python 虚拟环境工作原理解析
Dec 24 Python
移除Selenium中window.navigator.webdriver值
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
使PHP自定义函数返回多个值
2006/11/26 PHP
php split汉字
2009/06/05 PHP
php学习笔记之面向对象
2014/11/08 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
JavaScript实现简单验证码
2020/08/24 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
职业培训师职业生涯规划
2014/02/18 职场文书
欢迎词怎么写
2015/01/23 职场文书
离婚起诉书范本
2015/05/18 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
财务人员入职担保书
2015/09/22 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
员工工作心得体会
2019/05/07 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers