web-dev-qa-db-ja.com

メソッドエリアとPermGen

HotSpot JVMのメモリ構造を理解しようとしていたのですが、2つの用語"メソッド領域""PermGen"スペースと混同されました。私が参照したドキュメントによると、メソッド領域にはバイトコードを含むクラスとメソッドの定義が含まれています。他のいくつかのドキュメントは、それらがPermGenスペースに格納されていると言っています。

したがって、これら2つのメモリ領域は同じであると結論付けることができますか?

18

Javaメモリタイプ を確認する必要があります。オプションで、Javaの ガベージコレクション に関するこのドキュメントを参照してください。後者は非常に冗長であり、どちらも便利です。

実際、メソッド領域は永続世代の一部です。

テニュア世代と密接に関連する第3世代は、永続世代です。パーマネント世代は、Java言語レベルで同等性を持たないオブジェクトを記述するために仮想マシンが必要とするデータを保持するため、特別です。たとえば、クラスとメソッドを記述するオブジェクトはパーマネントに格納されます世代。

17
xea

永続的な生成スペースはクラス定義を保持するため、「メソッド領域」は「PermGen」のサブセットと見なすことができますが、インターンされた文字列や、破棄される可能性が低いその他のデータビットも保持します。

メソッドエリアは基本的に、クラススケルトンを保持するスタックのような非ヒープスペースです。スケルトンには、値を持つ静的変数、コンストラクターなどが含まれます。リフレクション操作は、このメモリ領域で操作されます。 Permは、ヒープに並列なメモリスペースであり、現在実行中のクラスのバイナリコードを保持します。

3
Pinkesh Sharma

http://www.pointsoftware.ch/en/under-the-hood-runtime-data-areas-javas-memory-model/ は、他の場所では見つけられなかったかなり良いアイデアを提供します。

ほとんどの人はヒープとスタックを同等のものとして、そして主要なコンポーネントとして話しますが、Taiは素晴らしい画像で絵に描いたように完璧な説明をします。

1
killjoy