申请说明 我在JAVA中有一个用于生成图表的应用程序。用户可以根据需要在GUI的帮助下设置图表。
问题描述: 创建图表时会使用一定量的内存,并且当创建新图表时,GC不会自动清除上一个图表使用的内存,但是,如果我插入System.gc()语句,则清除内存。我想让内存在每次生成新图表时清除所有死对象。
问题为什么GC不能像在Java中那样自动工作? 感谢您的投入。
答案 0 :(得分:2)
Don't use System.gc
。无法保证内存将被清除,这表明您的代码存在其他问题。 GC将按预期工作,通常不应归咎于这些问题。
你怎么知道GC有问题?一些选项需要考虑:
Xmx
和Xms
增加堆大小?关于GC系统的事情是你不必担心内存管理(在大多数情况下),你可以相信GC会为你处理它。所有你需要关心的是,无论你是在吹嘘你的堆,还是你所描述的,你似乎没有内存不足。您可以放心,GC会在其认为合适的时间收集未使用的内存。要控制行为,您必须调整GC。
答案 1 :(得分:2)
在java中,无法保证何时运行垃圾收集器。这个想法是你不必担心记忆。当你需要内存时,垃圾收集器现在应该已经清理了足够的空间。
如果在您需要时无法清除足够的空间,那么您将获得OutOfMemoryError
。
System.gc()是一个提示,可以帮助在垃圾回收的好时机通知垃圾收集器。但它并不一定会启动垃圾收集器。