为什么cpython在引发MemoryError之前不调用gc.collect()?
我注意到,即使在几乎一半的系统内存被标记为gc,但标记对象的数量低于gc阈值的情况下,cpython也会引发MemoryError。在这些情况下,手动调用gc.collect()并重试引发原始MemoryError的操作会成功,并且在此过程中会回收大量RAM为什么cpython在引发MemoryError之前不调用gc.collect()?,python,garbage-collection,allocation,cpython,Python,Garbage Collection,Allocation,Cpython,我注意到,即使在几乎一半的系统内存被标记为gc,但标记对象的数量低于gc阈值的情况下,cpython也会引发MemoryError。在这些情况下,手动调用gc.collect()并重试引发原始MemoryError的操作会成功,并且在此过程中会回收大量RAM 是否有理由cpython在引发MemoryError之前不尝试gc.collect()?这样做有缺点吗?CPython使用分代垃圾收集和引用计数器。我希望我能有时间仔细阅读所有细节,为这一机制如何运作给出答案,但这些是我拥有的资源:和。不过
是否有理由cpython在引发MemoryError之前不尝试gc.collect()?这样做有缺点吗?CPython使用分代垃圾收集和引用计数器。我希望我能有时间仔细阅读所有细节,为这一机制如何运作给出答案,但这些是我拥有的资源:和。不过,对于某些对象,GC将无法对其进行垃圾收集。CPython使用分代垃圾收集和引用计数器。我希望我能有时间仔细阅读所有细节,为这一机制如何运作给出答案,但这些是我拥有的资源:和。不过,对于某些对象,GC将无法对其进行垃圾收集。