为什么 JVM 的设计方式不允许强制垃圾收集? [关闭]

2024-02-25

据我所知,我们不能在JAVA中强制进行垃圾收集。我们能做的最好的事情就是通过调用发送请求System.gc() or Runtime.gc()。这样做会向 JVM 发送垃圾收集请求,但不能保证垃圾收集一定会发生。所以我的问题是:有什么特殊原因吗?WHYJVM 的设计方式不支持强制垃圾收集?


Forcing garbage collection is inefficient, and unnecessary in most cases1 ... if you have written your program correctly.

参考:

  • 为什么调用 System.gc() 是不好的做法? https://stackoverflow.com/questions/2414105/why-is-it-bad-practice-to-call-system-gc/2414621#2414621

事实证明,如果您控制将运行您的应用程序(或 applet 或 servlet 等)的 JVM 的启动,那么您可以确保调用System.gc()将运行 GC。或者至少,Sun / Oracle JVM 就是这种情况......其中的行为是通过-XX上的选项java命令。

javadoc 的要点是,这是依赖于平台的,可移植应用程序不能依赖它。


至于你的问题:

为什么 JVM 的设计方式不支持强制垃圾收集?

从而可以保护 JVM 免受编写不良代码的性能影响;例如在小程序、插件、第三方库等中。

(我想,部分原因是最初的 Sun 工程师有点厌倦了人们抱怨“Java 很慢”,而真正的问题是不必要的调用System.gc() ...)


1 - But not always. For example, calling System.gc() at a convenient time can be a way to avoid a GC-related pause at an inconvenient time. However, if your code only works if you run the GC at certain points, then you are doing something wrong.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 JVM 的设计方式不允许强制垃圾收集? [关闭] 的相关文章

随机推荐