/ / FullGCが物理メモリ(RES)を解放できない理由 - java、ガベージコレクション

FullGCが物理メモリ(RES)を解放できない理由 - java、ガベージコレクション

以下は RES 成長曲線: ここに画像の説明を入力

その後、 旧世代 占有率: ここに画像の説明を入力

jmapでFull GCを強制すると、Old genは実際には減少しましたが、RESは成長しています...

pmapの結果:

ここに画像の説明を入力

の意味は何ですか アンオン、それは非ヒープメモリですか?

編集

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

ヒープは約500MBしか使用されていませんが、RSSは15GBを超え、pmapは アンオン 約65MB。

私の質問は、ヒープの外でメモリを消費する可能性がありますか?ありがとう!

回答:

回答№1は1

OracleのJVMには、メモリー管理のための複数のアルゴリズムがあります。 それらのうちのいくつかは、未使用のメモリページをOSに返すことができます。

デフォルトのアルゴリズム(並列コレクタ)は、メモリをOSに返すことはありません。

次の2つのアルゴリズムはメモリをOSに返すことができます

  • シリアルGC(シングルスレッドマークスイープコンパクト)
  • G1

使用可能なアルゴリズムと関連するJVMオプションの概要が見つかりました ここに.


回答№2の場合は1

何かの意味は、非ヒープメモリですか?

anonはそれが mmap()"と MAP_ANON。 RSSを考えれば、おそらくヒープです。

FullGCが物理メモリ(RES)を解放できない理由

最大ヒープサイズ、ヒープ占有率、およびコミットされたヒープサイズを区別する必要があります。

  • 最大ヒープサイズは、予約されるアドレス空間ですが、必ずしもページによってバックアップされる必要はありません
  • コミットされたヒープサイズはページによって裏付けられ、通常はゼロ/プリタッチされます。これは一般的にRSSに影響するものです
  • 占有率は、ゼロの代わりに実際にオブジェクトを含む割合です

コミットされたヒープサイズがページをダウンした場合のみ できる OSに戻すことができます。

GCアルゴリズム、JVMバージョン、チューニングパラメータ(休止時間目標、 MaxHeapFreeRatio)。


あなたがリストする他の地域は、おそらく直接ByteBufferの割り当てですが、ネイティブライブラリからの他の割り当てでも可能です。 のヒープダンプを調べる java.nio.DirectByteBuffer インスタンスはさらに洞察を提供する必要があります。