获取可到达的活动对象的数量

时间:2014-11-12 14:33:41

标签: python garbage-collection

我目前正在调试Python程序中的内存泄漏。由于我的所有对象都没有__del__方法,因此我假设问题是某种全局变量,它继续累积对可到达对象的引用。此外,当我使用gc.debug(gc.DEBUG_LEAK)运行时,我会看到很多gc: collectable条消息,但没有gc: uncollectable条消息。为了证实这种怀疑,我想以某种方式得到我的程序中可达对象总数的计数,所以我可以确认它正在稳步增加。

有没有办法得到这个?我在看gc.get_count,但这似乎给了我实际收集的对象数(按生成分隔),而不是仍然可以访问的活动对象的数量。

1 个答案:

答案 0 :(得分:1)

看起来gc.get_objects就是你想要的。请谨慎使用DEBUG_LEAK,因为它意味着DEBUG_SAVEALLDEDUG_SAVEALL会导致所有未引用的对象保存在gc.garbage中而不是被释放。这意味着垃圾收集器跟踪的对象数量只会增加。另外gc.get_objects不返回所有当前活动的对象,因为垃圾收集器不跟踪某些类型(不跟踪原子类型)。例如,[i for i in range(1000)]只会增加一个跟踪的对象,因为垃圾收集器不会跟踪整数。然而,[[] for i in range(1000)]将增加1001跟踪的对象数量。