最大メモリを128MBに指定してプログラムを開始します
java -Xmx128M ...
次に、jconsoleを使用してjvmインスタンスに接続します。[VMの概要]タブで、次のことがわかりました。
Maximum heap size: 127,808 kbytes
この値は、コマンドラインで指定した値よりも小さくなっています。誰かが私にこれに関するいくつかのヒントを与えることができますか?
最大メモリを128MBに指定してプログラムを開始します
java -Xmx128M ...
次に、jconsoleを使用してjvmインスタンスに接続します。[VMの概要]タブで、次のことがわかりました。
Maximum heap size: 127,808 kbytes
この値は、コマンドラインで指定した値よりも小さくなっています。誰かが私にこれに関するいくつかのヒントを与えることができますか?
Java Visual VMによって報告される値を確認しました。それはまさに私が JVM 引数として設定したものです:
例
JVM argument: 1024m
Heap Max: 1.073.741.824 B
したがって、jconsole には特別な種類の計算があるか、Java Visual VM が設定された JVM 引数に値を調整すると思います。
正確なメモリサイズはわずかに小さいことがわかりました。Java と OS のバージョンに基づいて、どれだけ小さく表示されるかが異なります。あなたが求めたものとは正確に異なる実装上の理由があると思います。
ところで:これはヒープサイズの最大値にすぎません。他にも多くのメモリ領域があります。たとえば、スレッド スタック、ダイレクト メモリ、perm gen、共有ライブラリ、ネイティブ リソース、メモリ マップド ファイルなどは含まれていません。値とアプリケーションが使用する最大メモリ。
BTW2: 最近では最大 128m はかなり小さいです。小さいのにちゃんとした理由あるの?
次のJavaバグレポートを引用するには:
バグではありません。-Xmx フラグの解釈は VM に依存します。HotSpot を含む一部の VM では、このオプションの有効な値に下限が適用されます。CCC の提案では、このように -Xmx フラグについて言及するべきではありませんでした。