我有一个使用DirectByteBuffers存储数据的应用程序,但我想知道MaxDirectMemorySize是什么,所以我不会意外地超过它。
如果不手动配置,我如何从程序中找出MaxDirectMemorySize是什么?
答案 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()
。