この章では、ネイティブ・メモリー・トラッキング(NMT)機能について説明します。NMTは、HotSpot VMの内部メモリー使用状況を追跡するJava HotSpot VM機能です。NMTデータは、jcmd
ユーティリティを使用してアクセスできます。NMTは、サードパーティ・ネイティブ・コードおよびOracle Java Development Kit (JDK)クラス・ライブラリのメモリー割当てを追跡しません。NMTは、Java Mission Control (JMC)のHotSpotにNMTのMBean
を含めません。
jcmd
でネイティブ・メモリー・トラッキングを使用する場合、Java仮想マシン(JVM)またはHotSpot VMのメモリー使用状況を異なるレベルで追跡できます。NMTは、JVMまたはHotSpot VMが使用するメモリーのみを追跡し、ユーザーのネイティブ・メモリーは追跡しません。NMTは、クラス・データ共有(CDS)アーカイブによって使用されるメモリーの完全な情報は提供しません。
NMTでは次の機能がサポートされています。
HotSpot VMのNMTは、デフォルトでオフになっています。NMTをオンにするには、JVMコマンドライン・オプションを使用します。高度なランタイム・オプションの詳細は、Java Platform, Standard Editionツール・リファレンスのjavaを参照してください。
NMTは、jcmd
ユーティリティを使用してアクセスできます。jcmdを使用したNMTデータへのアクセスを参照してください。jcmd
ユーティリティを使用してNMTを停止できますが、jcmd
ユーティリティを使用してNMTを起動または再起動することはできません。
サマリー・レポートおよび詳細レポートの生成。
後の比較のための初期のベースラインの設定。
JVMコマンドライン・オプションによるJVM終了時のメモリー使用量レポートの要求。「VM終了時のNMT」を参照してください。
NMTデータにアクセスするには、NMTを有効にしてから、jcmd
ユーティリティを使用する必要があります。
NMTを有効にするには、次のコマンドライン・オプションを使用します。
-XX:NativeMemoryTracking=[off | summary | detail]
注意:
NMTを有効にすると、5-10%のパフォーマンス・オーバーヘッドが発生します。次の表に、NMTコマンドラインの使用オプションを示します。
表8-1 NMTの使用オプション
NMTのオプション | 説明 |
---|---|
off |
NMTはデフォルトで |
summary |
サブシステム別に集約されたメモリー使用量のみ収集します。 |
detail |
個々のコール・サイト別のメモリー使用量を収集します。 |
jcmd
を使用して収集したデータをダンプし、必要に応じて、そのデータを最後のベースラインと比較します。
jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]
表8-2 jcmdのNMTオプション
jcmdのNMTオプション | 説明 |
---|---|
summary |
カテゴリ別に集約されたサマリーを出力します。 |
detail |
|
baseline |
比較のために新しいメモリー使用量スナップショットを作成します。 |
summary.diff |
最後のベースラインに照らして新しいサマリー・レポートを出力します。 |
detail.diff |
最後のベースラインに照らして新しい詳細レポートを出力します。 |
shutdown |
NMTを停止します。 |