如何最好地测量Java程序的内存使用情况?

6
我目前正在使用VisualVM,但我遇到的问题是无法保存生成的图形。我需要报告有关其内存使用和运行时间的一些数据,尽管使用System.nanoTime()可以轻松获得运行时间。我也尝试过NetBeans分析器,但它不是我想要的,因为我不在寻找会减慢速度的特定部分,所以那样做就太过了。最大的问题是它占用了太多的处理时间。而且,至少就我所知,它也不像VisualVM那样容易捕获/传输数据。
理想情况下,最好的方法是一些方法调用,因为这样我就能更容易地获取信息,但任何像VisualVM这样实际允许我保存图表的程序都可以。与NetBeans分析器相比,VisualVM的性能非常好,虽然我想这是因为我没有使用它的分析器。
我目前正在使用Ubuntu,但Windows 7也可以。但我宁愿选择一个专门做这件事情的程序,因为由不具备此功能的程序获取的信息可能包括JVM和其他最好不要包括的东西。
嗯,显然,您可以保存当前会话的快照并最大化VisualVM窗口,这样您就可以放大图表,拍摄快照并裁剪它们...但那有点像是一个hack。如果您有更好的建议,请告诉我。
5个回答

15
Runtime.getRuntime().freeMemory();

Runtime.getRuntime().totalMemory();

3

请查看Runtime类。它有freeMemory、maxMemory和totalMemory属性,对于您的需求来说可能已经足够了。


2
你可能更喜欢优雅的方式来测量内存,而不是hack图像。 JConsole以JMX监视应用程序,提供程序API。我猜这就是你需要的。
参见:使用JConsole监视应用程序

0

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


0

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

-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接