DirectByteBuffersを使用してデータを格納するアプリケーションがありますが、MaxDirectMemorySizeが何であるかを知りたいので、誤ってそれを超えないようにします。
これを手動で構成せずに、プログラム内からMaxDirectMemorySizeをどのように把握できますか?
DirectByteBuffersを使用してデータを格納するアプリケーションがありますが、MaxDirectMemorySizeが何であるかを知りたいので、誤ってそれを超えないようにします。
これを手動で構成せずに、プログラム内からMaxDirectMemorySizeをどのように把握できますか?
受け入れられた回答は、オプションがコマンドラインで明示的に指定されている場合にのみ機能します。Java 6以降、を使用してオプションに直接アクセスできますHotSpotDiagnosticMXBean。次のJava7コードは、それを便利に読み取ることができます。
final HotSpotDiagnosticMXBean hsdiag = ManagementFactory
.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
if (hsdiag != null) {
System.out.println(hsdiag.getVMOption("MaxDirectMemorySize"));
}
これはゼロの値を返す可能性があることに注意してください。これは、に等しいデフォルト設定を使用することを意味しますRuntime.getRuntime().maxMemory()。たとえば、Windows7のOracleJDK 7u71 64ビットでは、3,690,987,520が返されます。
sun.miscまたは、パッケージへのアクセスを希望する場合は、を呼び出すことで直接利用できますsun.misc.VM.maxDirectMemory()。
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));
}