使用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(也称为生成)的信息,以及在不同事件发生时获取通知。

最新更新