HotSpot JVMのメモリ構造を理解しようとして、 「メソッド領域」と「PermGen」スペースという2つの用語と混同されました。私が参照したドキュメントによると、メソッド領域にはバイトコードを含むクラスとメソッドの定義が含まれています。他のいくつかのドキュメントは、それらがPermGenスペースに格納されていると言っています。
では、これら2つのメモリ領域は同じであると結論付けることができますか?
HotSpot JVMのメモリ構造を理解しようとして、 「メソッド領域」と「PermGen」スペースという2つの用語と混同されました。私が参照したドキュメントによると、メソッド領域にはバイトコードを含むクラスとメソッドの定義が含まれています。他のいくつかのドキュメントは、それらがPermGenスペースに格納されていると言っています。
では、これら2つのメモリ領域は同じであると結論付けることができますか?
Java メモリ タイプと、必要に応じて Java のガベージ コレクションに関するこのドキュメントを参照してください。後者は非常に冗長で、どちらも役に立ちます。
実際、メソッド領域は永久世代の一部です:
在職世代と密接な関係にある第 3 世代が永続世代です。パーマネント世代は、Java 言語レベルで等価でないオブジェクトを記述するために仮想マシンが必要とするデータを保持するため、特別です。たとえば、クラスとメソッドを記述するオブジェクトは、永続的な世代に格納されます。
「メソッド領域」は「PermGen」のサブセットと見なすことができます。永続的な世代空間にはクラス定義が保持されますが、インターンされた文字列や破棄される可能性が低いデータのその他のビットも保持されるためです。
メソッド領域は、基本的にスタックのようにクラスの骨格を保持する非ヒープ空間です。スケルトンには、値を持つ静的変数、コンストラクターなどが含まれます。リフレクション操作は、このメモリ領域で操作されます。Perm は、現在実行中のクラスのバイナリ コードを保持するヒープと並列のメモリ空間です。
他の場所では見つけられなかったかなり良いアイデアを提供します
ほとんどの人は、ヒープとスタックを同等のものとして、また主要なコンポーネントとして話しますが、Tai は素晴らしい画像を使って絵のように完璧な説明を提供します。
編集:リンクが機能しなくなりました:(