为什么在Python中应该手动运行垃圾回收?

12

我偶尔会遇到一些手动调用 gc.collect() 的代码,但不清楚为什么这样做。如果有的话,手动运行垃圾回收有什么优点,而不是让Python自动处理它呢?

2个回答

15
简而言之,效率。
如果您使用指针引用某些内容,则会使用内存。即使您停止指向它,它仍然会在短时间内占用内存。
Python的垃圾回收曾经使用引用计数。引用计数是一种智能的方式,通过检查其他对象对其的引用频率来判断何时不再需要内存。
不幸的是,引用计数仍然是一个计算过程,因此在所有时候运行它都会降低效率(尤其是当它不需要时),因此现在Python使用预定的垃圾回收。
问题在于,在某些特定功能中,Python现在不会立即进行垃圾回收,以释放不再使用的内存(如引用计数),因为它定期进行垃圾回收。
通常,在许多服务器应用程序或大规模计算中,需要手动运行垃圾回收,其中垃圾回收中的轻微违规会影响释放内存。
这里是Digi.com的link,如果我的解释不清楚,它可以完美地总结。希望这有助于Brendan!

这是不正确的,看看我的答案。 - Jonas H.

0

CPython(你最有可能使用的Python实现)同时支持自动引用计数和垃圾回收。

引用计数会导致大多数内存中的对象在不再需要时立即被释放(没有指向该对象的引用/变量)。

只有当存在循环引用时,垃圾回收才会介入。CPython会定期收集不再被引用的对象“岛屿”。

你很少需要涉及Python内存管理。显式调用gc.collect()确保立即运行垃圾回收(而不是引用计数)。但你可能不需要这样做,大多数调用gc.collect()的代码库也不需要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接