# 示例代码:Python 内存泄漏
import sys
import gc
class MyClass:
def __init__(self, name):
self.name = name
self.ref = None
def create_cycle():
a = MyClass("Object A")
b = MyClass("Object B")
# 创建一个循环引用
a.ref = b
b.ref = a
# 没有其他引用指向 a 和 b,但它们互相引用,导致垃圾回收器无法回收
return a, b
def main():
print("Creating reference cycles...")
for _ in range(10000):
create_cycle()
# 手动触发垃圾回收
gc.collect()
# 检查剩余对象数量
print(f"Number of objects: {len(gc.get_objects())}")
if __name__ == "__main__":
main()
循环引用:在 create_cycle
函数中,我们创建了两个对象 a
和 b
,它们相互引用。由于 Python 的垃圾回收机制(基于引用计数和周期性垃圾回收),这些对象不会被立即回收,从而可能导致内存泄漏。
手动触发垃圾回收:通过调用 gc.collect()
,我们可以手动触发垃圾回收器来清理未被引用的对象。
检查对象数量:使用 gc.get_objects()
可以查看当前内存中的对象数量,帮助我们判断是否有内存泄漏。
内存泄漏的原因:在这个例子中,虽然 a
和 b
没有外部引用,但由于它们之间的循环引用,垃圾回收器无法自动回收它们,直到我们手动调用 gc.collect()
。
如果你需要更复杂的内存泄漏场景或不同的示例,请告诉我!
上一篇:python获取路径的最后一级
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站