在Grails应用中计算当前PermGen用法的最佳方法是什么?
我正在尝试做一些
的图表调用Runtime.getRuntime()freeMemory();
调用Runtime.getRuntime()totalMemory();
我还要测量免费的PermGen空间。大多数关于这个问题的搜索引擎+ Stack Overflow结果都在处理类似PermGenOutOfMemory的错误,我只想访问这些错误的数据。
答案 0 :(得分:3)
只需使用JConsole或VisualVM与其联系即可。您无法以编程方式确定应用程序中的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。