Python 使用引用计数方法来处理对象的生命周期。所以一个不再使用的对象会被立即销毁。
但是,在 Java 中,GC(垃圾收集器)会销毁在特定时间不再使用的对象。
Java 为什么选择这种策略,这样做有什么好处?
这比 Python 方法更好吗?
最佳答案
使用引用计数有一些缺点。最常提到的一种是循环引用:假设 A 引用 B,B 引用 C 和 C 引用 B。如果 A 放弃对 B 的引用,则 B 和 C 的引用计数仍然为 1,并且不会被删除与传统的引用计数。 CPython(引用计数不是 python 本身的一部分,而是其 C 实现的一部分)通过一个单独的垃圾收集例程来捕获循环引用,它会定期运行......
另一个缺点:引用计数会使执行速度变慢。每次引用和取消引用对象时,解释器/VM 必须检查计数是否已降至 0(如果是,则解除分配)。垃圾回收不需要这样做。
此外,垃圾收集可以在单独的线程中完成(虽然它可能有点棘手)。在具有大量 RAM 的机器上和仅缓慢使用内存的进程上,您可能根本不想进行 GC!引用计数在性能方面会有点缺点......
关于java - 为什么 Java 和 Python 的垃圾回收方法不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21934/