Как определить MaxDirectMemorySize на работающей JVM? - PullRequest
1 голос
/ 30 июля 2011

У меня есть приложение, которое использует DirectByteBuffers для хранения данных, но я хотел бы знать, что такое MaxDirectMemorySize, чтобы я случайно не превысил его.

Без настройки этого вручную, как я могу выяснить,изнутри программы, что такое MaxDirectMemorySize?

Ответы [ 2 ]

3 голосов
/ 24 марта 2015

Принятый ответ работает, только если опция явно указана в командной строке. Начиная с 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().

3 голосов
/ 30 июля 2011

Юу может получить ВСЕ параметры JVM с ...

RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> args=RuntimemxBean.getInputArguments();

for(int i=0;i<args.size();i++) {
    System.out.println(args.get(i)); 
}
...