使用VM命令行在执行期间查找最大分配堆大小?
我想知道我是否可以使用VM命令行获取已allocated heap
的最大大小。
从现在起我可以使用Netbeans Profiler
获得它,但我更喜欢获得结果,而无需启动额外的应用程序。
我也在使用这种方法:
public void printMemUsage(){ double currentMemory = ( (double)((double)(Runtime.getRuntime().totalMemory()/1024.0)))- ((double)((double)(Runtime.getRuntime().freeMemory()/1024.0))); System.out.println("Current memory usage in kilobytes :"+currentMemory); }
我想我也可以使用它来获得最大堆大小,但我不确定它是否非常可靠。
我目前使用这些命令行:
-verbose:gc -XX:+ PrintGCDetails -XX:+ PrintGCApplicationConcurrentTime -XX:+ PrintGCApplicationStoppedTime
为了获得有关gc活动,年轻一代,老年人和永久性人的良好信息。 但是我可以在收集发生时告诉当前的总堆空间。
那么有没有办法获得使用其他命令行分配的最大堆空间?
您应该使用MemoryMXBean
,请参阅javadoc以获取详细信息,因为它解释了如何使用它来获取有关每个MemoryPool
(也称为生成)的信息并在不同事件发生时获取通知。