为什么我们调用System.gc()方法对未使用对象进行垃圾收集,如果垃圾收集是由守护程序线程在后台进程中以常规间隔在守护程序中自动完成的?
答案 0 :(得分:3)
出于测试目的,了解GC的执行时间非常有用。然而,这很少见,并且在不需要时调用System.gc()是一个常见错误,您可以使用-XX:+DisableExplicitGC.
将其关闭
答案 1 :(得分:0)
我们不是,因为我们通常不比GC聪明。从技术上讲,调用它并不能保证它会运行,尽管在许多实现中它都可以运行。
此外,它不一定按照常规的方式进行,而是根据需要进行。不同的实现将根据不同的标准启动GC。
答案 2 :(得分:0)
System.gc()只是给垃圾收集器一个暗示,这可能是垃圾收集的好时机,例如因为很多对象不再使用,处理已经完成。
它不会强制垃圾收集器做任何事情 - 它只是给出一个提示。
只有在需要优化应用程序(分析后)后才能使用它。
到目前为止,我认为我从未在生产代码中看到它。
答案 3 :(得分:0)
虽然它不应该是必要的,但是当我在一个非常大的Map被清空之后我做了一个显式的System.gc时,我的代码会发生很大的打击,只是为了在循环中再次重新填充。我想没有任何暗示,收藏家尝试了很小的gcs,直到很明显不会这样做。是的,我把它投入生产。我也发表评论,这样我的同事就会测试而不是盲目地删除。