我有一个使用 DirectByteBuffers 存储数据的应用程序,但我想知道 MaxDirectMemorySize 是什么,所以我不会意外超过它。
如果不手动配置它,我怎么能从程序中弄清楚 MaxDirectMemorySize 是什么?
我有一个使用 DirectByteBuffers 存储数据的应用程序,但我想知道 MaxDirectMemorySize 是什么,所以我不会意外超过它。
如果不手动配置它,我怎么能从程序中弄清楚 MaxDirectMemorySize 是什么?
仅当在命令行上明确指定选项时,接受的答案才有效。从 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 上的 Oracle JDK 7u71 64 位,这将返回 3,690,987,520。
或者,如果您愿意使用该sun.misc
软件包,可以直接通过调用sun.misc.VM.maxDirectMemory()
.
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));
}