Li *_* Pi 2 java garbage-collection jvm bytebuffer
我有一个使用 DirectByteBuffers 来存储数据的应用程序,但我想知道 MaxDirectMemorySize 是什么,这样我就不会意外超过它。
如果不手动配置,我如何从程序中找出 MaxDirectMemorySize 是什么?
仅当在命令行上明确指定该选项时,接受的答案才有效。从 Java 6 开始,您可以使用HotSpotDiagnosticMXBean. 下面的Java 7代码可以方便的阅读:
final HotSpotDiagnosticMXBean hsdiag = ManagementFactory
.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
if (hsdiag != null) {
System.out.println(hsdiag.getVMOption("MaxDirectMemorySize"));
}
Run Code Online (Sandbox Code Playgroud)
请注意,这可能会返回零值,这意味着使用默认设置,等于Runtime.getRuntime().maxMemory()。例如,对于 Windows 7 上的 Oracle JDK 7u71 64 位,这将返回 3,690,987,520。
或者,如果您愿意访问该sun.misc包,可以直接通过调用 来获取它sun.misc.VM.maxDirectMemory()。