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

Gra*_*ier 13 java garbage-collection jvm

据我所知,我们不能强迫JAVA中的垃圾收集.我们能做的最好的事情是通过调用System.gc()或发送请求Runtime.gc().这样做会将垃圾收集请求发送到JVM,但不能保证垃圾收集会发生.所以我的问题是:有什么特别的原因,为什么 JVM的设计方式不支持Force Garbage Collection?

Ste*_*n C 16

强制垃圾收集是低效的,在大多数情况下是不必要的1 ...如果您已正确编写程序.

参考:

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

javadoc所做的一点是,这取决于平台,便携式应用程序不能依赖它.


至于你的问题:

为什么JVM的设计方式不支持Force Garbage Collection?

这样可以保护JVM免受编写错误代码的性能影响; 例如在applet,插件,第三方库等

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


1 - 但并非总是如此.例如,System.gc()在方便的时间呼叫可以是在不方便的时间避免与GC相关的暂停的方法.但是,如果您的代码仅在某些点运行GC时才有效,那么您做错了.