Linux では、Java アプリケーションの top コマンド出力の DATA とは何ですか?

Linux では、Java アプリケーションの top コマンド出力の DATA とは何ですか?

Linux プラットフォームで JBoss アプリケーションを実行していますが、次のようなトップ出力があります (実際には正確なデータではありません)。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM  CODE DATA TIME+  COMMAND
 1379 root      16   0  9.7g 1.6g 1980 S  0.7  1.3 36  9.7g 0:11.03 java

物理メモリは合計で 1.6g、データ部分は 9.7g です。実際のヒープ サイズは、JVM で構成されているとおり、約 128m です。質問は、Java アプリケーションの DATA 部分には何が格納されているのかということです。何か手がかりはありますか。また、どのように最適化すればよいでしょうか。

ありがとう、エムレ

答え1

DATAアプリケーションによって割り当てられたメモリを意味します。brk(2)つまり、データ セグメントを拡張します。

Java には、データ セグメントに格納されるさまざまなものがあります。

  • ヒープ
  • ネイティブランタイム層によって割り当てられたメモリ(nativeキーワードを使用するコード)
  • JNI/JNA を使用して Java からロードする DLL/共有ライブラリによって割り当てられたメモリ
  • JIT によってバイトコードがロード、解釈、コンパイルされるメモリ (コード キャッシュ)
  • GC やその他のランタイムサポートコードで使用されるメモリ構造
  • スタック

プログラムに 128MB のヒープを割り当てると、Java はヒープの一部ではないヒープ管理用の構造もいくつか作成するため、それ以上の領域が割り当てられることに注意してください。つまり、128MB は、Java オブジェクトを割り当てることができる領域が 128MB あることを意味します。

答え2

これは、実行可能コード以外の用途に割り当てられた物理メモリの量で、「データ常駐セット」サイズまたは DRS とも呼ばれます。通常、すべての列を詳細に説明したマニュアル ページを参照できます。マニュアル ページを取得するには、 と入力しますman top

関連情報