使用VM命令行在执行期间查找最大分配堆大小?

时间:2012-02-05 19:27:57

标签: java garbage-collection jvm

我想知道我是否可以使用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活动,年轻一代,老年人和永久性人的良好信息。但是我可以在收集发生时告诉当前的总堆空间。

那么有没有办法获得使用其他命令行分配的最大堆空间?

1 个答案:

答案 0 :(得分:2)

您应该使用MemoryMXBean,有关详细信息,请参阅the javadoc,因为它解释了如何使用它来获取有关每个MemoryPool(也称为代)的信息,并在发生不同事件时收到通知。