我们有一个桌面应用程序,其中一些旧安装没有适当的内存设置。
他们在“随机”时间经历了perm gen空间,我需要提醒运行MaxPermSize太低的用户,但我无法弄清楚如何从jvm访问此设置。
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
首先,我建议您连接JConsole或VisualVM。您无法确定应用程序中的PermGen大小(以编程方式)。另一种方法是使用MemoryMXBean,但它做简单的内存报告,但坚持使用我提到的工具来获得更详细的图片。
因此,如果您要使用MemoryMXBean,请尝试使用此代码
MemoryMXBean memMXBean = ManagementFactory.getMemoryMXBean();
memMXBean.getHeapMemoryUsage().getUsed();
memMXBean.getNonHeapMemoryUsage().getUsed();
它显示快照数据而不是通信值:)
答案 2 :(得分:-1)