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的Django中django-userena组件的简单使用教程
May 30 Python
Python作用域用法实例详解
Mar 15 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
Python编写一个优美的下载器
Apr 15 Python
对python使用http、https代理的实例讲解
May 07 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 Python
django创建css文件夹的具体方法
Jul 31 Python
python实现PolynomialFeatures多项式的方法
Jan 06 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获取301跳转URL简单实例
2013/12/16 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
js创建对象的方式总结
2015/01/10 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
python基于http下载视频或音频
2018/06/20 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
什么是View State?
2013/01/27 面试题
早餐连锁店计划书
2014/01/08 职场文书
军训拉歌口号
2014/06/13 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
民政工作个人总结
2015/02/28 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书