衡量Java程序内存使用情况的最佳方法是什么?

我目前正在使用VisualVM ,但我遇到的问题是我无法保存它生成的图形。 我需要报告一些有关其内存使用情况和运行时间的数据,尽管使用System.nanoTime()很容易获得运行时间。 我也尝试过NetBeans探测器,但它不是我想要的,因为我不是在寻找会减慢速度的特定部件,所以这样就太过分了。 最大的问题是它占用了太多的处理时间。 另外,不要让我像VisualVM一样轻松捕获/传输数据,至少就我所知。

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

我目前正在使用Ubuntu,但Windows 7很好。 我宁愿有一个专门做这个的程序,因为那些没有的程序得到的信息可能包括JVM和其他更好的东西。

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

 Runtime.getRuntime().freeMemory(); Runtime.getRuntime().totalMemory(); 

看看Runtime类。 它有freeMemory,maxMemory和totalMemory。 这可能足够接近您的目的。

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

请参阅: 使用JConsole监视应用程序

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

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

 -XX:+PrintGCTimeStamps -XX:+PrintGCDetails