2012-02-01 18 views
15

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

この2つのメモリ領域が同じであると結論できますか?

+0

更新:java8からPermGenはありません。また、すべてのクラス、メソッド、文字列インターンはMetaspaceに保存されています。リンク:http://karunsubramanian.com/websphere/one-important-change-in-memory-management-in-java-8/ –

答えて

11

としてあなたは、「メソッド領域」「PermGen」のサブセットを検討することもできJava Memory Typesを見てください。必要に応じて、JavaのGarbage Collectionに関するこの文書を参照してください。後者は非常に冗長で、両方とも有用です。

実際メソッド領域は、Permanent世代の一部である:古い世代に密接に関連

第三世代は 永久的な発生です。永続的な世代は特別です。 には、 にJava言語レベルで同等のものがないオブジェクトを記述するために、仮想マシンが必要とするデータが格納されているためです。例えば、 のクラスとメソッドを記述するオブジェクトは、永続 世代に格納されます。

5

永久生成空間がクラスdefintionsを保持し、それはまた、インターン文字列と、これまでに廃棄される可能性が低いデータの他のビットを保持し、

+0

しかし、それはPermGenサブセットだけではなく、PermGen空間の外側にメソッド領域が存在する可能性があります? – falsarella

+1

いいえ、私の理解では、そのようなデータはすべてPermGenに入っています。 –

+1

更新:インターナショナル・ストリングは、Java 7以降のメイン・ヒープに格納されます。 http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html#jdk7changes –

3

メソッド領域は、基本的にクラススケルトンを保持するスタックのようなヒープ以外の領域です。スケルトンには値、コンストラクタなどの静的変数が含まれます。反射操作はこのメモリ領域で操作されます。 Permはヒープと並行して現在の実行クラスのバイナリコードを保持するメモリ空間です。

関連する問題