如何在正在运行的JVM上确定MaxDirectMemorySize?

时间:2011-07-29 20:49:11

标签: java garbage-collection jvm bytebuffer

我有一个使用DirectByteBuffers存储数据的应用程序,但我想知道MaxDirectMemorySize是什么,所以我不会意外地超过它。

如果不手动配置,我如何从程序中找出MaxDirectMemorySize是什么?

2 个答案:

答案 0 :(得分:3)

Yuu可以使用...

获取所有JVM参数
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> args=RuntimemxBean.getInputArguments();

for(int i=0;i<args.size();i++) {
    System.out.println(args.get(i)); 
}

答案 1 :(得分:3)

只有在命令行中明确指定了选项时,才能使用已接受的答案。从Java 6开始,您可以使用HotSpotDiagnosticMXBean直接访问该选项。以下Java 7代码可以方便地读取它:

final HotSpotDiagnosticMXBean hsdiag = ManagementFactory
        .getPlatformMXBean(HotSpotDiagnosticMXBean.class);
if (hsdiag != null) {
    System.out.println(hsdiag.getVMOption("MaxDirectMemorySize"));
}

请注意,这可能会返回零值,这意味着要使用默认设置,该设置等于Runtime.getRuntime().maxMemory()。例如,在Windows 7上使用64位Oracle JDK 7u71,这将返回3,690,987,520。

或者,如果您愿意使用sun.misc套餐,可以直接致电sun.misc.VM.maxDirectMemory()