如何检测PermGen可用内存

时间:2011-11-02 16:22:05

标签: java grails groovy

在Grails应用中计算当前PermGen用法的最佳方法是什么?

我正在尝试做一些

的图表
  

调用Runtime.getRuntime()freeMemory();

     

调用Runtime.getRuntime()totalMemory();

我还要测量免费的PermGen空间。大多数关于这个问题的搜索引擎+ Stack Overflow结果都在处理类似PermGenOutOfMemory的错误,我只想访问这些错误的数据。

3 个答案:

答案 0 :(得分:3)

只需使用JConsoleVisualVM与其联系即可。您无法以编程方式确定应用程序中的PermGen大小。您可以使用MemoryMXBean进行简单的内存报告,但坚持使用我提到的工具来获得更详细的图片。

答案 1 :(得分:1)

我想你应该试试这个

public class Main {
    public static void main(final String[] args) {
        final RuntimeMXBean memMXBean = ManagementFactory.getRuntimeMXBean();
        final String prefix = "-XX:MaxPermSize=";
        final List<String> jvmArgs = memMXBean.getInputArguments();
        String maxPermSize = null;
        for (final String jvmArg : jvmArgs) {
            if (jvmArg.startsWith(prefix)) {
                maxPermSize = jvmArg.substring(prefix.length());
                break;
            }
        }

        System.out.println("MaxPermSize is " + maxPermSize);
    }
}

答案 2 :(得分:0)

我认为ManagementFactory可能是源,其中一个从List getMemoryPoolMXBeans()返回的池应该是PermGen。