2012-06-13 4 views
13

フレンド、PermGenとヒープとの違いとその意味

ヒープとパーマージェンの重要性、相違点、用途を教えてください。 また、どのクラスがそれぞれ読み込まれているか知っておくと良いでしょう。 JavaのVMの仕様に関連

説明 Punith

+0

この関連する質問を参照してください:http://stackoverflow.com/questions/2070791/young-tenured-and-perm-generation/33994430#33994430 –

答えて

21

メモリ(ヒープ)は、世代別に管理されているか、または異なる年齢のオブジェクトを保持しているメモリプールです。世代がいっぱいになると、世代ごとにガベージコレクションが発生します。オブジェクトは若いオブジェクトの場合はyoung generationに割り当てられ、幼児死亡のためにほとんどのオブジェクトがそこで死亡します。

新しいオブジェクトが作成されると、Young Generationの一部であるエデンスペースに移動します。

オブジェクトがしばらくしてもまだ生きている場合は、オブジェクトが長く存在するtenured generationに行きます。

オブジェクトがオーバープロセスまで存在すると仮定すると、オブジェクトはPerm Generationに移動されます。 Java classesはパーマネント世代に格納されます。

0

まあ私は専門家ではありませんが、実行時にすべてのクラスがロードされる特別な場所のように、PermGemメモリはヒープ内にあります。したがって、クラスが多すぎる場合、PermGemはOutOfMemoryExceptionをスローします。また、ヒープは、Javaコード内にインスタンス化したオブジェクトを格納します。ここで、GCは、スタック内の実行中のスレッド内の変数によって参照されないオブジェクトを収集します。

+2

それは本当ではありません。 PerGenはヒープスペースとは別のものです。 (これ)[https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation] – Santosh

+0

ええ、あなたが正しいことを確認してください。私はそうではないとは確信していませんが、分離して達成しようとしていたのはGCが永久データをチェックしないので、ヒープで彼が収集できるものをチェックするだけなので意味があります。 –

0

私はPermgenがヒープメモリ内のメモリ領域だと思います。これは、Stringを保持するような特別な目的のために作成されます。

作成されたすべてのオブジェクトがPermgenメモリを取得しないJDK 6以下のStringのような特殊なクラスラの場合のみです。

最新のJDKバージョン8以上では、Pergenは見つかりませんでしたが、Non Heapや他のさまざまなキャッシュメモリなどの新しいメモリが導入されました。

関連する問題