【问题标题】:Java Swing memory usageJava Swing 内存使用情况
【发布时间】:2014-01-09 15:35:07
【问题描述】:

关于这个问题有很多问题,但没有一个答案让我满意;我正在使用 Swing 编写一个简单的 GUI 窗口。目前它只包含 4 个按钮,其中一个是打开文件选择器。

当我使用 VisualVM Monitoring 工具查看内存使用情况时,结果如下所示:

memory usage http://img17.imageshack.us/img17/3589/8txc.png

当我点击按钮时,第一个派克出现了,然后我什么也没做。

空闲应用程序消耗 10M/min 是否正常(当它不做任何事情时?)

由于我必须使用图像做一个类似测验的小程序,我是否应该在每次切换到下一个问题时调用System.gc() 以避免(可能很大?)内存使用?

【问题讨论】:

  • 以编程方式调用 system.gc() 经常无济于事,因为现代垃圾收集器实现有自己的启发式方法来进行清理或不清理。我不确定您的代码为什么会这样做,这可能是正常的(请发布整个代码,以便我可以尝试使用 jconsole)。看看它在 6 分钟执行时间内的演变也会很有趣。
  • “关于这个问题有很多问题,但没有一个答案让我满意” 什么,而不是这些问题的答案之一指出,看着记忆Java 应用程序。与连续数小时凝视自己的肚脐一样有用吗?当您看到OutOfMemoryError 时担心它,那么您有需要修复的内存泄漏。否则:如果它没有坏,就不要修理它。
  • Jorge_B:whiskeyspider 的回应表明你是对的;我应该等待更长的时间。 AndrewThompson:这是一种关心记忆的奇怪方式,但我会在未来尝试应用你的建议 :-)

标签: java swing memory-management jvm


【解决方案1】:

我可以用一个简单的测试程序重新创建你看到的内容,但是如果你让监视器跟踪更长的时间......

CPU 一直处于 0%(只是一个打开的 JFileChooser 坐在那里)。内存波动很好奇,但我认为 JVM 肯定在做各种后台管理和维护任务。这项工作将使用最终建立起来的内存。它会定期自行清理。

要考虑的另一件事是已分配堆中的内存使用情况。您的程序实际上一直在使用一致量的实际内存,正如您从扁平的橙色线中看到的那样。

【讨论】:

    【解决方案2】:

    我认为问题出在 JFileChooser 上。当我使用它时,我注意到 fileChooser 正在“等待”某些东西。当我错误地关闭程序时,fileChooser 会抛出错误。也许这会对你有所帮助:)

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 2018-01-16
      • 1970-01-01
      • 2010-09-28
      • 2011-02-14
      • 2019-04-18
      • 2011-04-08
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多