Java Swing内存使用情况

6
这个问题有很多答案,但都没有让我满意的答案;我正在使用Swing编写一个简单的GUI窗口。目前它只包含4个按钮,其中之一是打开文件选择器。
当我使用VisualVM监控工具查看内存使用情况时,结果如下所示: memory usage http://img17.imageshack.us/img17/3589/8txc.png 在我点击按钮后,第一个峰值出现了,然后我什么都没做。
这对于空闲应用程序每分钟消耗10M(在不做任何事情时)是正常的吗?
由于我必须使用图像来制作类似于测试的小应用程序,所以每次切换到下一个问题时,我应该使用System.gc()吗,以避免(潜在的巨大?)内存使用?

2
通过编程频繁调用system.gc()通常没有什么作用,因为现代垃圾收集器实现有自己的启发式算法来进行清理或不清理。我不确定你的代码为什么这样做,可能只是正常的(请发布完整代码,以便我可以使用jconsole尝试)。看到它在执行时间超过6分钟后的演变也会很有趣。 - Jorge_B
1
有很多关于这个问题的问题,但没有一个答案能让我满意。而且,这些问题中没有一个指出观察Java应用程序的内存与盯着自己的肚脐看几个小时一样有用。当你看到OutOfMemoryError时再担心它,那么你就需要修复内存泄漏了。否则:如果它没坏,就不要修理它。 - Andrew Thompson
Jorge_B:whiskeyspider的回复表明你是对的;我应该等待更久。AndrewThompson:这是一种奇怪的关注内存的方式,但我将尝试在未来应用你的建议 :-) - bagage
2个回答

2
我可以通过一个简单的测试程序来重现你看到的情况,但是如果你让监视器跟踪更长一段时间......
CPU在整个过程中都为0%(只有一个开放的JFileChooser坐在那里)。 内存波动是令人好奇的,但我认为JVM必须执行各种后台管理和维护任务。 那项工作将使用内存,最终会积累。 并且定期进行清理。
另一个需要考虑的问题是,这个内存使用是否在已分配的堆内。 实际上,从平坦的橙色线条可以看出,您的程序一直在使用一致数量的实际内存。

0

我认为问题出在JFileChooser上。当我使用它时,我注意到文件选择器一直在“等待”某些操作。当程序不正确关闭时,文件选择器会抛出一个错误。也许这可以帮到您 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接