Jop*_*ela 7 python garbage-collection
由于python垃圾收集器处理循环引用的检测(对象A引用对象B和引用对象A的对象B),我想知道什么可能导致python代码中的内存泄漏?您是否可以提供代码的特定示例,这些代码会创建垃圾收集器无法处理的无法访问的内存区域,或者这样的事情是不可能的?
任何例子都赞赏!
您可以使用 gc \xe2\x80\x94 垃圾收集器接口模块,
\n\n\n\n\n\n
gc.garbage
:收集器发现无法访问但无法释放的对象列表(无法收集的对象)。默认情况下,此列表仅包含具有
\n__del__()
方法的对象。[1] \n 具有__del__()
方法且属于引用循环的对象\n 会导致整个引用循环不可收集,包括\n 不一定在循环中但只能从循环中访问的对象。\n Python 不会\xe2\x80 \x99 不会自动收集此类循环,因为\n 一般来说,Python 不可能\xe2\x80\x99 猜测运行方法的安全顺序__del__()
。如果您知道安全顺序,则可以通过检查垃圾列表并显式中断由于列表中的对象而导致的循环来强制解决问题。请注意,即使如此,这些对象由于位于垃圾列表中而仍保持活动状态,因此它们也应该从垃圾中删除。例如,在中断循环后,执行del
\ngc.garbage[:]
来清空列表。\xe2\x80\x99s 通常最好通过不创建包含对象的循环来避免\n 问题__del__()
.\n 方法创建包含对象的循环来避免该问题,并且在这种情况下可以检查垃圾以验证是否未创建此类循环。
归档时间: |
|
查看次数: |
3751 次 |
最近记录: |