データを格納するために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));
}
を持つすべてのJVMパラメータを取得することができます。 Java 6以降では、HotSpotDiagnosticMXBean
を使用して直接オプションにアクセスできます。次のJava 7のコードは便利それを読むことができます。これはRuntime.getRuntime().maxMemory()
に等しいデフォルトの設定を、使用することを意味し、ゼロの値を返すことが
final HotSpotDiagnosticMXBean hsdiag = ManagementFactory
.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
if (hsdiag != null) {
System.out.println(hsdiag.getVMOption("MaxDirectMemorySize"));
}
注意を。たとえば、Windows 7上のOracle JDK 7u71 64ビットでは、3,690,987,520が返されます。
また、sun.misc
パッケージにアクセスすることに喜んでいる場合は、sun.misc.VM.maxDirectMemory()
に直接電話することができます。
私のWindows 7マシンのOracle JDK 7u75では、5707,923,456という値が得られます。この値はマシン固有のものだと思います。 –
ありがとうございます!これはまさに私が必要としていたものです。 –
しかし、それがjvm引数に設定されていない場合、どのような値がわかりますか? – stu
私はそれが常にあると信じています。少なくとも私がチェックした。 –