Принятый ответ работает, только если опция явно указана в командной строке. Начиная с Java 6, вы можете получить доступ к этой опции напрямую, используя HotSpotDiagnosticMXBean
. Следующий код Java 7 может читать это удобно:
final HotSpotDiagnosticMXBean hsdiag = ManagementFactory
.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
if (hsdiag != null) {
System.out.println(hsdiag.getVMOption("MaxDirectMemorySize"));
}
Обратите внимание, что при этом может возвращаться нулевое значение, что означает использование настройки по умолчанию, равной Runtime.getRuntime().maxMemory()
. Например, в случае 64-разрядной версии Oracle JDK 7u71 в Windows 7 возвращается 3 690 987 520.
В качестве альтернативы, если вы готовы обратиться к пакету sun.misc
, его можно получить напрямую по телефону sun.misc.VM.maxDirectMemory()
.