1

可能重复:
读取 Java JVM 启动参数(例如 -Xmx)

我们有一个桌面应用程序,其中一些旧安装没有适当的内存设置。

他们在“随机”时间体验到 perm gen 空间不足,我需要提醒用户 MaxPermSize 运行得太低,但我不知道如何从 jvm 访问此设置。

4

3 回答 3

4

这应该让您大致了解如何做到这一点

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);
    }
}
于 2012-11-14T10:27:42.610 回答
1

首先,我建议您连接 JConsoleVisualVM。您无法确定应用程序中的 PermGen 大小(以编程方式)。另一种方法是使用 MemoryMXBean,但它只做简单的内存报告,但坚持使用我提到的工具来获得更详细的图片。
因此,如果您要使用 MemoryMXBean,请尝试此代码

MemoryMXBean memMXBean = ManagementFactory.getMemoryMXBean();
memMXBean.getHeapMemoryUsage().getUsed();
memMXBean.getNonHeapMemoryUsage().getUsed();

它向您显示快照数据而不是计算值:)

于 2012-11-14T10:19:58.413 回答
-1

这将给出相应的属性值。

System.getProperty("XX:MaxPermSize"); 

检查这个 url如何查看 JVM 中的 MaxPermSize?

于 2012-11-14T10:16:32.290 回答