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

时间:2015-06-07 05:24:49

标签: java garbage-collection jvm

据我所知,我们不能强制JAVA中的垃圾收集。我们所能做的最好是通过致电System.gc()Runtime.gc()来发送请求。这样做会将垃圾收集请求发送到JVM,但不能保证垃圾收集会发生。所以我的问题是:是否有任何特殊原因,为什么 JVM的设计方式是它不支持Force Garbage Collection?

2 个答案:

答案 0 :(得分: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时才有效,那么您做错了。

答案 1 :(得分:3)

Java的设计使得(与C ++不同)您不必关心回收废弃的内存。如果运行时内存配置正确,则无需关心垃圾回收。话虽如此,做一个gc()通常会触发年轻一代的空间。