衡量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