【问题标题】:Best way to measure Memory Usage of a Java Program?衡量 Java 程序内存使用情况的最佳方法是什么?
【发布时间】:2010-08-21 03:22:12
【问题描述】:

我目前正在使用 VisualVM,但我遇到的问题是我无法保存它生成的图表。我需要报告一些关于它的内存使用和运行时间的数据,虽然运行时间很容易用System.nanoTime() 得到。我也尝试了 NetBeans 分析器,但这不是我想要的,因为我不是在寻找会减慢它的特定部分或任何东西,所以这将是矫枉过正。它最大的问题是它占用了太多的处理时间。至少据我所知,也不能让我像 VisualVM 那样轻松捕获/传输数据。

理想情况下,最好的方法是调用一些方法,因为这样我就可以更轻松地获取信息,但是像 VisualVM 这样实际上可以让我保存图形的任何东西都很好。与 NetBeans 分析器相比,VisualVM 的性能也相当不错,但我想那是因为我没有使用它的分析器。

我目前使用的是 Ubuntu,但 Windows 7 很好。不过,我宁愿有一个专门从事此工作的程序,因为不这样做的程序获得的信息可能包括 JVM 和其他最好省略的东西。

好吧,显然,您可以保存当前会话的快照并在 VisualVM 中最大化窗口,这样您就可以使图表更大、拍摄快照并剪切它们……但这是一种 hack。欢迎提出更好的建议。

【问题讨论】:

    标签: java profiler visualvm measurement memory-consumption


    【解决方案1】:
    Runtime.getRuntime().freeMemory();
    
    Runtime.getRuntime().totalMemory();
    

    【讨论】:

      【解决方案2】:

      查看Runtime 类。它有freeMemory、maxMemory 和totalMemory。对于您的目的,这可能已经足够接近了。

      【讨论】:

        【解决方案3】:

        您可能更喜欢优雅的方法来测量内存,而不是破解图像。 JConsole 通过 JMX 来监控应用程序,它提供程序 API。我想这就是你所需要的。

        见:Using JConsole to Monitor Applications

        【讨论】:

          【解决方案4】:

          试试JProfiler。虽然它不是免费的,但您可以先试用评估版。

          【讨论】:

            【解决方案5】:

            HPjmeter 控制台是免费的。使用-Xloggc:<file> 运行您的Java 进程并使用它打开<file>。您不仅可以保存会话,还可以比较运行。其他要考虑包含在命令行中的选项是:

            -XX:+PrintGCTimeStamps
            -XX:+PrintGCDetails
            

            【讨论】:

              猜你喜欢
              • 2014-11-30
              • 2010-10-19
              • 1970-01-01
              • 1970-01-01
              • 2010-09-23
              • 2020-04-22
              • 2016-10-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多