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中的一些高级编程技巧
Apr 02 Python
详解Python编程中time模块的使用
Nov 20 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
python Web开发你要理解的WSGI & uwsgi详解
Aug 01 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
简单了解python单例模式的几种写法
Jul 01 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
Python库安装速度过慢解决方案
Jul 14 Python
教你怎么用Python生成九宫格照片
May 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编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
学习经验演讲稿
2014/05/10 职场文书
初中学习计划书范文
2014/09/15 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
2014年村官工作总结
2014/11/24 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
关于Python中进度条的六个实用技巧分享
2022/04/05 Python