当前位置: 首页 > article >正文

python的内存管理机制

python的内存管理机制主要分为三个部分:引用计数、垃圾回收和内存池机制

引用计数机制:

python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数,当对象不再被使用时,引用计数为0,python就会自动释放该对象所占用的内存。引用计数的python内存管理机制的基础。

通过它可以快速的回收不再被使用的对象。

Python使用引用计数来跟踪对象的引用情况。每当一个对象被引用时,它的引用计数就会加1;
当一个对象的引用被删除时,它的引用计数就会减1。当一个对象的引用计数为0时,说明没有任何引用指向它,这时垃圾回收机制会将其所占用的内存释放掉。引用计数是一种简单而高效的内存管理方式,但它无法解决循环引用的问题

import sys
a =[]
b=a
count = sys.getrefcount(a)
print( count )
#a 的引用计数值为 3,因为有 a、b 和作为 refcount 都引用了一个空列表

垃圾回收机制(简称GC garbage collection):

python使用垃圾回收器来清理那些引用计数为0的对象所占用的内存。

python中的垃圾回收机制主要有两种:标记清除和分代回收

标记清除是python最早的垃圾回收算法

分代回收是pyton的另一种垃圾回收算法,它将内存分为三代,每一代的存活时间越长,就越不容易被回收。

除了引用计数外,Python还使用垃圾回收机制来处理循环引用等无法通过引用计数解决的内存管理问题,垃圾回收机制会定期检查程序中的对象,找出那些没有被引用的对象,并将其释放掉。Python使用的垃圾回收算法是基于分代的垃圾回收算法,即将对象分为不同的代,根据对象的存活时间来决定何时进行垃圾回收。一般情况下,新创建的对象会被分配到第0代,如果经过一定的时间后仍然存活,则会被晋升到下一代。垃圾回收机制会根据不同代的对象进行不同频率的回收,以提高垃圾回收的效率

内存池机制:

python中的内存池是一个缓存区,用于管理小于256个字节的对象的内存分配。

当对象的大小小于256K时,python会使用内存池进行内存分配,

否则就会直接调用C标注库中的malloc/realloc等函数进行内存分配。

内存池的作用就是避免了频繁地进行内存分配和释放,从而提高了程序的执行效率。

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统
对于Python对象,以下几种情况,都有其独立的私有内存池。(字符串的驻留机制)
1、字符串长度为0或者1
2、符合标识符的字符串(只包含字符数字下划线)
3、字符串只在编译时进行驻留,而非运行时
4、[-5,256]之间的整数数字

怎么优化内存管理

手动垃圾回收
先调用del a;再调用gc.collect()即可手动启动GC(嵌套的引用删除不了,因为引用计数为1)
调高垃圾回收阈值
gc.set threshold 设置垃圾回收阈值(收集频率)
避免循环引用


http://www.kler.cn/news/327738.html

相关文章:

  • DOM元素导出图片与PDF:多种方案对比与实现
  • 数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall
  • 线程池:线程池的实现 | 日志
  • 普通人如何在未来市场中寻找赚钱机会?
  • 深信服2025届全球校招研发笔试-C卷(AK)
  • UE4/UE5开发资源
  • pyqt QGraphicsView 以鼠标为中心进行缩放
  • uniapp中实现评分组件,多用于购买商品后,对商品进行评价等场景
  • 数据结构-AC自动机
  • python 实现矩阵的Schur complement舒尔补算法
  • Goland无法使用debug的修复
  • 【源码+文档+调试讲解】无人超市系统python
  • 【Docker】02-数据卷
  • 【研1深度学习】《神经网络和深度学习》阅读笔记(记录中......
  • 博弈论(学习笔记)
  • RK3568 android11 适配鼎桥MT5710-CN 5G模块
  • 墙绘产品在线展示:SpringBoot技术的应用
  • 数据结构——对顺序线性表的操作
  • docker 私有仓库的镜像删除
  • 基于SSM的O20兼职系统的设计与实现(源码+定制+文档)
  • Windows下安装 LLama-Factory 保姆级教程
  • leetcode:字符串相加
  • leetcode每日一题day19(24.9.29)——买票需要的时间
  • 为啥数据需转换成tensor才能参与后续建模训练
  • Kafka学习笔记(一)Linux环境基于Zookeeper搭建Kafka集群、Kafka的架构
  • 生信名词|脱靶效应|表型药物发现|VAE|批次效应|基于表型|自监督学习
  • pdf怎么编辑修改内容?详细介绍6款pdf编辑器功能
  • 解决docker一直出现“=> ERROR [internal] load metadata for docker.io/library/xxx“的问题
  • 基于SpringBoot+Vue的服装销售管理系统
  • 技术周刊 | Express.js 5.0、Meta Connect 2024、字节发布两款视频生成大模型、OpenAI CEO 发长文预测超级人工智能