Java System.GC()和内存泄漏

时间:2014-01-21 00:48:05

标签: java memory-leaks garbage-collection

我已经阅读并在论坛中搜索有关泄漏内存并逐渐增加RAM的信息。我尝试在我的程序中每隔60秒使用一次System.GC()方法的调用,并且考虑到我的RAM使用量每次调用都会丢失,它似乎正在工作。为什么不使用这种方法是个好主意?在我读过的每篇文章中,他们似乎都模糊地解释了为什么这个方法不会释放内存,但我的程序似乎却说不然。有些人甚至说该方法什么也没做,但建议垃圾收集器清理自己。注意:我的泄漏不是来自我知道的静态方法,因为我从整个项目中删除了它们,RAM仍然增加了。我会发布我的代码,但它相当大,所以我怀疑是否有人愿意阅读它。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如你所说,System.gc()只是一个建议。它不能保证强制垃圾收集,但实际上它经常这样做。

Java垃圾收集定期运行。如果你发现你的记忆力随着时间的推移而增加并且你没有回收它,那么你就会有内存泄漏。致电System.gc()无法解决此问题。如果你的记忆力泄漏,最终将无法收集。

通常,您不需要强制GC。正如我所提到的,GC将自行运行。您可以调整其行为 - http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

答案 1 :(得分:-1)

原始问题来自内存泄漏。 Sympthom是 *由于内存泄漏,没有足够的内存空间 *因此JVM将再次尝试再次执行GC。 *但仍有足够的内存。再次GC再次。

所以System.GC或GC调整的种类没有帮助。

要解决这个问题,你必须找到我们的内存泄漏点。

在JVM中,有一些工具可以转储当前的内存占用量(heapdump)。

您可以使用此功能找出泄漏点。 有关详情,请参阅此处 - http://www.oracle.com/technetwork/java/javase/memleaks-137499.html