上:DATA = RES +スタック+とは何ですか?

上:DATA = RES +スタック+とは何ですか?

Linux MintでJavaプログラムのメモリ消費量を分析しました。私はtopメモリ統計(プログラムで使用されているメモリとtotal_mem_usedやmem_freeなどのシステム全体の指標)を取得するために使用しました。結果は素晴らしいです。

  • 「使用済み物理メモリ」(RAM_USE_DELTAチャート内)は増加し、「使用可能な物理メモリ」(チャートから回復)RAM_FREE_DELTAはRES(チャート内)の増加とP_RSS同じ量だけ減少します。これが私が期待したものです。
  • DATA(P_DATAチャートの)フィールド(top一番上の「実行コード以外の専用物理メモリの量」として説明されています)は、RESより150 MB高いです。
  • スワップ(SWAP_USE_DELTAチャート内)は常に0です。
  • SHR(共有メモリ、P_SHRチャート)は15MB未満です。

問題は、前述の150MBが正確に何であるかです。仮想(予約されているが割り当てられていない)スタックはありますか?メモリマッピングファイル?前に書いたようにRESRAM_USED_DELTAだから利用可能なメモリ量が150MBほど減らなくて仮想メモリを意味するかもしれませんが、メモリ表示が常駐セットと仮想メモリ量の合計であればおかしいようですが...

メモリ使用量チャート

(この図で描かれている線は、プログラム*_DELTAの先頭に基づいています。つまり、赤が始まる左側の近くにありますP_RSS。)

ベストアンサー1

DATA フィールドは、実行不可能なコード、つまりデータに割り当てられるプロセスの仮想メモリです。これには、静的データ、スタック、および動的に割り当てられたメモリが含まれ、CODEフィールドとともに仮想メモリ全体に含まれます。 RESidentサイズは、RAM内の仮想メモリの実際の量です。これは、部分コード、部分データ、およびその他の部分(メモリマッピングファイルなど)で構成されます。

VIRT、CODE、DATA、RESの間には直接的な関係がないことがわかります。 CODEはコンパイラによって提供されます。 VIRTとDATAはプロセス(、など)によって制御されます。malloc()RES部分はオペレーティングシステムによって制御されます。free()mmap()

おすすめ記事