这是垃圾收集的标准问题.
它不是关于内存泄漏,而是关于循环引用本身,以及由那些可能需要清理的对象管理的其他类型的资源.引用创建依赖项 - 在删除引用的所有对象之前,不能删除引用程序,因为它可能需要在清理期间对这些引用的对象执行某些操作.
作为一个人为的例子,两个对象可能各自都有日志文件,在清理过程中可能需要将日志消息写入自己的日志文件和另一个日志文件.您无法先清除任何一个对象,因为这样做会让另一个对象无法执行清理.
基本规则是你可以拥有可靠的析构函数(如在C++中)或垃圾收集(如Python,Java ......),但不能同时使用.虽然原则上,代码的静态分析(或者在大多数情况下甚至是视觉检查)可以告诉您哪些类可能具有此循环引用问题.
来自gc.garbage的文档:
Python不会自动收集这样的循环,因为一般来说,Python不可能猜测运行
__del__()方法的安全顺序 .如果您知道安全订单,则可以通过检查垃圾清单来强制解决问题,并明确地打破由于列表中的对象而导致的周期.
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |