每个人都说避免System.gc()的原因是,它是一个相当不错的指标,根本上破碎的代码。任何依赖于它的正确性的代码肯定是破碎的;任何依赖它的性能很可能被打破。
你不知道你在运行什么样的垃圾回收器。当然有一些不会像你所说的那样“停止世界”,但是有些JVM不是那么聪明,或者出于各种原因(也许他们在电话上?)不要这样做。你不知道它会做什么。
此外,它不能保证做任何事情。 JVM可能完全忽略您的请求。
“你不知道它会做什么,”“你不知道它会甚至帮助,”和“你不应该需要调用它”反过来的组合是为什么人们是如此有力地说,一般你不应该叫它。我认为这是一个“如果你需要问是否应该使用这种情况,你不应该”
编辑从另一个线程解决几个关注:
在阅读你链接的线程之后,还有一些我想指出的事情。
首先,有人建议调用gc()可能会向系统返回内存。这当然不一定是真的 – Java堆本身独立于Java分配增长。
和之前一样,JVM将保存内存(数十兆字节),并根据需要增加堆。它不一定会将内存返回到系统,即使您释放Java对象;它完全自由地保持分配的内存用于未来的Java分配。
要显示可能System.gc()什么也不做,查看: