python的内存管理机制及调优手段_Python的内存管理机制及调优手段

本文介绍了Python的内存管理机制及调优手段。内存管理机制包括引用计数、垃圾回收(标记清除、分代收集)和内存池。引用计数直观简单,但存在循环引用问题;标记清除可处理循环引用;分代收集根据对象存活时间调整回收间隔。调优手段有手动垃圾回收、调高阈值和避免循环引用。

发布日期:  2020-04-20 11:04:42

标签:内存池内存思路art弱引用python对象分代引用计数pre

内存管理机制:引用计数、垃圾回收、内存池

引用计数:

引用计数是一种非常高效的内存管理手段,当一个Python对象引用时其引用计数加一,当其不再被一个变量引用时则减一。当引用计数等于0时对象被删除。

1.引用计数:

引用计数也是一种垃圾收集机制,而且也是一种最直观,最简单的垃圾收集技术。当 Python 的某个对象的引用计数降为 0 时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了。比如某个新建对象,它被分配给某个引用,对象的引用计数变为 1。如果引用被删除,对象的引用计数为 0,那么该对象就可以被垃圾回收。不过如果出现循环引用的话,引用计数机制就不再起有效的作用了。

2.标记清除:

如果两个对象的引用计数都为1,但是仅仅存在他们之间的循环引用,那么这两个对象都是需要被回收的。也就是说,他们的引用计数虽然表现为非0,但是实际上有效的引用计数为0.所以现将循环引用摘掉,就会得出这两个对象的有效计数。

3、分代收集

经过上面的【标记-清理】方法,已经可以保证对垃圾的回收了,但还有一个问题,【标记-清理】什么时候执行比较好呢,是对所有对象都同时执行吗?

同时执行很显然不合理,我们知道,存活越久的对象,说明他的引用更持久(好像是个屁话,引用不持久就被删除了),为了更合理的进行【标记-删除】,就需要对对象进行分代处理,思路很简单:1、新创建的对象做为0代2、每执行一个【标记-删除】,存活的对象代数就+13、代数越高的对象(存活越持久的对象),进行【标记-删除】的时间间隔就越长。这个间隔,江湖人称阀值你感觉此页面对你有用,想留你的信息那么联系客服吧!

4.调优手段(了解)1.手动垃圾回收

2.调高垃圾回收阈值

3.避免循环引用(手动解循环引用和使用弱引用)你感觉此页面对你有用,想留你的信息那么联系客服吧!你感觉此页面对你有用,想留你的信息那么联系客服吧!

Python的内存管理机制及调优手段

标签:内存池内存思路art弱引用python对象分代引用计数pre

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值