Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我们要调用System.gc()方法来对未使用对象进行垃圾收集_Java_Garbage Collection - Fatal编程技术网

Java 为什么我们要调用System.gc()方法来对未使用对象进行垃圾收集

Java 为什么我们要调用System.gc()方法来对未使用对象进行垃圾收集,java,garbage-collection,Java,Garbage Collection,为什么我们要调用System.gc()方法来对未使用的对象进行垃圾收集,如果垃圾收集是由后台进程中的守护进程以固定的间隔在Java中自动完成的?出于测试目的,了解何时执行了gc是很有用的。然而,这是罕见的,在不需要时调用System.gc()是一个常见的错误,您可以使用-XX:+DisableExplicitGC.将其关闭,因为我们通常不比gc聪明。从技术上讲,调用它并不能保证它会运行,尽管在许多实现中确实如此 此外,不一定在定期会议上进行,而是根据需要进行。不同的实现将基于不同的标准启动GC。

为什么我们要调用System.gc()方法来对未使用的对象进行垃圾收集,如果垃圾收集是由后台进程中的守护进程以固定的间隔在Java中自动完成的?

出于测试目的,了解何时执行了gc是很有用的。然而,这是罕见的,在不需要时调用System.gc()是一个常见的错误,您可以使用
-XX:+DisableExplicitGC.

将其关闭,因为我们通常不比gc聪明。从技术上讲,调用它并不能保证它会运行,尽管在许多实现中确实如此

此外,不一定在定期会议上进行,而是根据需要进行。不同的实现将基于不同的标准启动GC。

System.GC()只是给垃圾收集器一个提示,这可能是垃圾收集的好时机,例如,因为很多对象不再使用,处理已经完成

它并不强迫垃圾收集器做任何事情——它只是给出一个提示

仅在需要优化应用程序时使用此选项(在分析之后)


到目前为止,我想我还没有在生产代码中见过它。

虽然它不应该是必需的,但当我在一个循环中清空一个非常大的映射,然后再次重新填充之后,当我执行显式System.gc时,我的代码就更少了。我想在没有任何暗示的情况下,收集者尝试了小型地面军事系统,直到很明显这是行不通的。是的,我把它投入生产了。我还写了一条评论,这样我的同事们就可以测试而不是盲目删除。

谁是“我们”?您可能想阅读此线程,并且所讨论的代码可能遵循了错误的做法或做出了一些假设-询问将其放入其中的人为什么这样做:不,我们没有。只有当JVM内存不足并且需要清除垃圾时,GC才会运行。它不是定期运行的。