我有一個應用程序使用DirectByteBuffers來存儲數據,但我想知道MaxDirectMemorySize是什麼,所以我不會意外超過它。如何確定正在運行的JVM上的MaxDirectMemorySize?
沒有手動配置,我怎麼能從程序中找出MaxDirectMemorySize是什麼?
我有一個應用程序使用DirectByteBuffers來存儲數據,但我想知道MaxDirectMemorySize是什麼,所以我不會意外超過它。如何確定正在運行的JVM上的MaxDirectMemorySize?
沒有手動配置,我怎麼能從程序中找出MaxDirectMemorySize是什麼?
悠可以得到...
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> args=RuntimemxBean.getInputArguments();
for(int i=0;i<args.size();i++) {
System.out.println(args.get(i));
}
如果在命令行中明確指定的選項接受的答案只能ALL JVM參數。從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()
。
使用我的Windows 7機器上的Oracle JDK 7u75,得到:5,707,923,456,所以我認爲這個值是機器特定的。 –
謝謝!這正是我需要的。 –
但是如果它沒有被設置爲jvm參數,那麼您如何找出該值是什麼? – stu
我相信它永遠是。至少每次我都檢查過。 –