【问题标题】:Java program's memory usage is not accurateJava程序的内存使用不准确
【发布时间】: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() 进行比较

标签: java memory jvm runtime


【解决方案1】:

已解决问题。与堆栈溢出有关,该堆栈溢出不足以被捕获为异常,但足以使内存使用量激增。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多