Java gc不会自动清除内存

时间:2013-10-29 17:38:46

标签: java memory garbage-collection

申请说明 我在JAVA中有一个用于生成图表的应用程序。用户可以根据需要在GUI的帮助下设置图表。

问题描述: 创建图表时会使用一定量的内存,并且当创建新图表时,GC不会自动清除上一个图表使用的内存,但是,如果我插入System.gc()语句,则清除内存。我想让内存在每次生成新图表时清除所有死对象。

问题为什么GC不能像在Java中那样自动工作? 感谢您的投入。

2 个答案:

答案 0 :(得分:2)

Don't use System.gc。无法保证内存将被清除,这表明您的代码存在其他问题。 GC将按预期工作,通常不应归咎于这些问题。

你怎么知道GC有问题?一些选项需要考虑:

  • 您是否了解了您的代码以了解它是如何使用内存以及是否正在释放内存?
  • 你抓住物体的时间比你应该的长吗?
  • 如果一切顺利,您是否尝试使用XmxXms增加堆大小?
  • 另一种选择是考虑tuning GC,使其表现得如你所愿。

关于GC系统的事情是你不必担心内存管理(在大多数情况下),你可以相信GC会为你处理它。所有你需要关心的是,无论你是在吹嘘你的堆,还是你所描述的,你似乎没有内存不足。您可以放心,GC会在其认为合适的时间收集未使用的内存。要控制行为,您必须调整GC。

答案 1 :(得分:2)

在java中,无法保证何时运行垃圾收集器。这个想法是你不必担心记忆。当你需要内存时,垃圾收集器现在应该已经清理了足够的空间。

如果在您需要时无法清除足够的空间,那么您将获得OutOfMemoryError

System.gc()是一个提示,可以帮助在垃圾回收的好时机通知垃圾收集器。但它并不一定会启动垃圾收集器。