2021年5月14日 / 37次阅读 / Last Modified 2021年5月14日
继续学习python的内存部分。
上一篇提到了gc.collect启动的时机为默认的700,这是啥意思?
700是指allocation和deallocation的次数差,既然还没有运行gc.collect,哪里来的deallocation呢?
我们需要了解更多的关于python内存管理的细节:
第1点可以解释我之前的一个疑问,python函数可以直接返回一个在函数内部定义的对象。因为对象在heap中,就可以安全的返回对象引用,函数执行结束,并不意味着函数内部对象的消亡。
第2点说明了gc.collect的真正作用:解决reference count不为0的情况下,unreachable对象的释放问题,这些unreachable对象在运行时不能被释放,一般都是因为有循环引用。进一步,如果这些对象还定义了 __del__,gc.collect也无能为力!
因此,如果确定自己的python程序中不存在循环引用,为了优化性能,可以关闭gc.collect!(关闭后,去检查程序的内存占用情况)
补充阅读:https://www.infoq.cn/article/disable-python-gc-mechanism-instagram-performance-increase/
-- EOF --
本文链接:https://www.pynote.net/archives/3662
前一篇:Python内存管理和gc模块
后一篇:HEVC中的Z-Scan
©Copyright 麦新杰 Since 2019 Python笔记