测量Java程序内存使用情况的最佳方法?
我目前使用的是VisualVM,但我遇到的问题是无法保存它生成的图形。我需要报告一些关于内存使用和运行时间的数据,尽管使用测量Java程序内存使用情况的最佳方法?,java,profiler,visualvm,measurement,memory-consumption,Java,Profiler,Visualvm,Measurement,Memory Consumption,我目前使用的是VisualVM,但我遇到的问题是无法保存它生成的图形。我需要报告一些关于内存使用和运行时间的数据,尽管使用System.nanoTime()很容易获得运行时间。我还尝试了NetBeans profiler,但这不是我想要的,因为我没有寻找会使其速度变慢的特定部分或任何东西,所以这太过分了。它最大的问题是占用了太多的处理时间。也不允许我像VisualVM一样轻松地捕获/传输数据,至少就我所知是这样 理想情况下,最好的方法是进行一些方法调用,因为这样我可以更容易地获取信息,但任何像V
System.nanoTime()
很容易获得运行时间。我还尝试了NetBeans profiler,但这不是我想要的,因为我没有寻找会使其速度变慢的特定部分或任何东西,所以这太过分了。它最大的问题是占用了太多的处理时间。也不允许我像VisualVM一样轻松地捕获/传输数据,至少就我所知是这样
理想情况下,最好的方法是进行一些方法调用,因为这样我可以更容易地获取信息,但任何像VisualVM这样的方法都可以让我保存图形。与NetBeans分析器相比,VisualVM的性能也相当好,不过我想这是因为我没有使用它的分析器
我目前正在使用Ubuntu,但Windows7还可以。不过我更希望有一个专门做这项工作的程序,因为不做这项工作的程序所获得的信息可能包括JVM和其他最好忽略的东西
显然,您可以保存当前会话的快照,并在VisualVM中最大化窗口,这样您就可以将图表放大,拍摄快照并剪切它们。。。但这是一种黑客行为。欢迎提出更好的建议。试试看。虽然不是免费的,但你可以先试用试用版。看看这门课。它有freeMemory、maxMemory和totalMemory。对于您的目的来说,这可能已经足够近了。控制台是免费的。使用-Xloggc:
运行Java进程,并用它打开
。您不仅可以保存会话,还可以比较运行。在命令行中包括的其他选项是:
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
您可能更喜欢优雅的方法来测量内存,而不是黑客图像。 众所周知,JConsole通过JMX监控应用程序,它提供程序API。我想这就是你需要的 见:
Runtime.getRuntime().freeMemory();
Runtime.getRuntime().totalMemory();