1

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

如果不手动配置它,我怎么能从程序中弄清楚 MaxDirectMemorySize 是什么?

4

2 回答 2

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 上的 Oracle JDK 7u71 64 位,这将返回 3,690,987,520。

或者,如果您愿意使用该sun.misc软件包,可以直接通过调用sun.misc.VM.maxDirectMemory().

于 2015-03-24T02:12:18.887 回答
2

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)); 
}
于 2011-07-29T20:55:50.077 回答