java - 为什么 Java 和 Python 的垃圾回收方法不同?

标签 java python garbage-collection

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/

相关文章:

python - 在 celery 中如何获取特定任务名称的所有任务的任务状态?

python - SQLAlchemy是否支持 "closure tables?"

Python:如何修改 for 循环中交替键的字典值?

javascript - SpiderMonkey GC通知和弱引用

java - 如何跟踪 NetBeans 中 JAVA GC 清除的对象?

java - 运行时修改Ehcache配置

java - 如何在/info 执行器端点中获取 Spring Boot 的版本

java - Collections.unmodifyingMap 可以保留原始 map 吗?

java - spring-boot 创建 logging.path_IS_UNDEFINED.log 文件

java - Android - 在 ImageView 中使用大图像或使用不同大小的图像