【发布时间】:2012-09-30 02:46:59
【问题描述】:
在我的 java 应用程序中,我显示了程序的内存使用情况。不幸的是,它是零星的,而且经常是错误的。我当前的代码是
component.setText("Memory usage : "+((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024 / 1024) + "mb");
有时,它会返回正确的值(应该是 10-20mb 左右),有时它会返回非常奇怪的值。这与正在运行的其他 java 程序(尤其是 Netbeans)相关,但在没有其他程序运行时仍然表现出来。那句话有什么问题?有没有更好的方法来更准确地表示内存使用情况?
【问题讨论】:
-
我不确定,但这是因为垃圾收集器随机运行并释放内存。您可能希望在打印此程序之前运行垃圾收集器。
-
但它完全超过了实际使用量(20 与 500 相比)。GC 不会造成 很大差异。
-
使用 VisuamVM 连接并查看您的号码是否与 VisuamVM 图表匹配。您可以使用该工具执行一些快速分析。
-
这些“非常奇怪的值”是什么?如果如上所述它们是 500,那么您设置的是哪种 -mx?要查看基于进程当前需求与最大允许堆相比分配了多少,请将 runtime.totalMemory() 与 runtime.maxMemory() 进行比较