python内存管理机制原理详解

作者:小白龙i 时间:2021-05-24 16:19:48 

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内存管理机制原理详解

来源:https://www.cnblogs.com/longpy/p/11053310.html

标签:python,内存,管理,机制
0
投稿

猜你喜欢

  • Ajax+Servlet+jsp显示搜索效果

    2023-06-14 08:29:34
  • PHP MVC模式在网站架构中的实现分析

    2023-07-22 21:05:14
  • 让数据站住脚-浅谈用户研究中的信度与效度

    2010-09-10 13:14:00
  • win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题

    2022-03-31 17:26:15
  • 对django中foreignkey的简单使用详解

    2021-09-04 21:04:20
  • Python 相对路径报错:"No such file or directory"'原因及解决方法

    2021-08-12 05:34:00
  • W3C 接连推出 7 个 HTML 草案

    2010-03-10 10:37:00
  • 深入理解Python分布式爬虫原理

    2023-02-06 14:33:30
  • 教你快速掌握一些方便易用的SQL语句

    2008-11-28 15:21:00
  • 利用php+mcDropdown实现文件路径可在下拉框选择

    2023-09-11 15:18:02
  • python中requests爬去网页内容出现乱码问题解决方法介绍

    2023-09-14 01:00:11
  • python爬虫 urllib模块发起post请求过程解析

    2022-02-07 22:52:53
  • Oracle 安装和卸载问题收集(集合篇)第1/6页

    2009-07-02 12:20:00
  • ASP XMLDom在服务器端操作XML文件的主要方法和实现

    2011-03-09 11:09:00
  • 基于信息排序的信息理解

    2008-05-16 10:37:00
  • 如何获得ADO的连接信息?

    2009-11-23 20:33:00
  • Python画图时如何调用本地字体

    2023-08-02 08:51:31
  • python matplotlib 画dataframe的时间序列图实例

    2023-05-17 00:12:34
  • 在ASP.NET 2.0中操作数据之三十九:在DataList的编辑界面里添加验证控件

    2023-07-06 02:02:48
  • 实现Python3数组旋转的3种算法实例

    2021-11-12 04:23:10
  • asp之家 网络编程 m.aspxhome.com