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

时间:2010-08-21 03:22:13

标签: java profiler visualvm measurement memory-consumption

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

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

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

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

5 个答案:

答案 0 :(得分:15)

Runtime.getRuntime().freeMemory();

Runtime.getRuntime().totalMemory();

答案 1 :(得分:3)

查看Runtime课程。它有freeMemory,maxMemory和totalMemory。这可能足以满足您的目的。

答案 2 :(得分:2)

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

请参阅:Using JConsole to Monitor Applications

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails