深度解析Python的内存管理机制:垃圾回收机制

本文深入探讨Python内存管理机制,特别是垃圾回收和引用计数。通过实例展示了如何通过`sys.getrefcount()`跟踪引用计数,解释了全局变量和返回列表如何影响内存释放。此外,还讨论了循环引用的问题以及Python如何通过标记清除和分代收集解决此类问题,以防止内存泄漏。
摘要由CSDN通过智能技术生成

Python程序在运行时,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量,计算完成后,再将结果输出到永久性存储器中。但是当数据量过大,或者内存空间管理不善,就很容易出现内存溢出的情况,程序可能会被操作系统终止。

图片.png

而对于服务器这种用于永不中断的系统来说,内存管理就显得更为重要了,不然很容易引发内存泄漏。

这里的内存泄漏是指程序本身没有设计好,导致程序未能释放已不再使用的内存,或者直接失去了对某段内存的控制,造成了内存的浪费。

图片.png

Python 是通过什么机制来管理不会再用到的内存空间的呢?

Python引用计数机制

在学习 Python 的整个过程中,我们一直在强调,Python 中一切皆对象,也就是说,在 Python 中你用到的一切变量,本质上都是类对象。

那么,如何知道一个对象永远都不能再使用了呢?很简单,就是当这个对象的引用计数值为 0 时,说明这个对象永不再用,自然它就变成了垃圾,需要被回收。

举个例子:

import os
import psutil

显示当前 python 程序占用的内存大小

def show_memory_info(hint):
pid = os.getpid()
p = psutil.Process(pid)

info = p.memory_full_info()
memory = info.uss / 1024. / 1024
print(’{} memory used: {} MB’.format(hint, memory))
def func():
show_memory_info(‘initial’)
a = [i for i in range(10000000)]
show_memory_info(‘after a created’)

func()
show_memory_info(‘finished’)

输出结果为:

initial memory used: 47.19140625 MB
after a created memory used: 433.91015625 MB
finished memory used: 48.109375 MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值