最佳答案
在回答问了一个关于如何用System.gc()
来Java中的强制对象(这个家伙正在清除一个1.5GB的HashMap)的问题后,我被告知手动调用System.gc()
是不好的做法,但评论并不完全令人信服。此外,似乎没有人敢对我的回答投赞成票,也没有人敢投反对票。
我在那里被告知这是一种糟糕的做法,但后来我又被告知垃圾收集器的运行不再系统地停止整个世界,而且JVM也只能有效地将其用作提示,所以我有点不知所措。
我知道JVM通常比您更了解何时需要回收内存。我也明白,担心几千字节的数据是愚蠢的。我也明白,即使是兆字节的数据也不如几年前了。但还是1.5 gb ?你知道在内存中有1.5 GB的数据;这又不是瞎猜的。System.gc()
在系统上是坏的,还是在某个点上它变得好了?
所以这个问题实际上是双重的
System.gc()
是或不是不好的做法?它真的只是在某些实现下对JVM的一个提示,还是总是一个完整的收集周期?真的有垃圾回收器实现可以在不停机的情况下完成工作吗?请阐明人们在对我的回答的评论中所做的各种断言。System.gc()
是否是从来没有的好主意,或者在某些情况下是可以接受的?如果有,是什么时间?