質問

Heap、Young、Tenured、Perm 世代と混同しています。

誰か説明してもらえますか?

役に立ちましたか?

解決

Java ガベージ コレクターは、 世代別ガベージ コレクター. 。アプリケーション内のオブジェクトは、作成された場所と使用方法に応じて、存続期間が異なります。ここでの重要な洞察は、存続期間の短いオブジェクトと存続期間の長いオブジェクトに対して異なるガベージ コレクション戦略を使用することで、それぞれのケースに合わせて GC を最適化できるということです。

大まかに言えば、オブジェクトが「存続」するにつれて、ガベージ コレクションが繰り返されます。 若い世代 彼らはに移行されます 在職期間のある世代. 。の 永続的な世代 は特殊なケースで、JVM に必要なオブジェクト (クラスやメソッドを表すオブジェクトなど) がプログラム内で必ずしも表現されるわけではないオブジェクトが含まれます。

以来、 若い世代 通常、その中には大量のゴミが含まれていますが、一度に大量の未使用オブジェクトを削除するように最適化されています。の 在職期間のある世代 存続期間の長いオブジェクトが含まれているため、大量のメモリを無駄にすることなく、迅速なガベージ コレクションを行うように最適化されています。

ガベージ コレクション テクノロジの改善により、詳細は非常に複雑になり、JVM とその構成方法によって異なります。読んでください。 ドキュメンテーション 何が起こっているかを正確に知る必要がある場合は、使用している特定の JVM について調べてください。

そうは言っても、概念的なレベルでは依然として役立つ単純な歴史的配置があります。歴史的には、 若い世代 だろう コピーコレクター そしてその 在職期間のある世代 になる マークアンドスイープコレクター. 。あ コピーコレクター ガベージを削除するための CPU コストは基本的に発生しません。コストのほとんどはライブ オブジェクトの維持にあり、この効率性の代償としてメモリ使用量が増加します。あ マークアンドスイープコレクター ライブオブジェクトと未使用オブジェクトの両方にある程度の CPU コストを支払いますが、メモリをより効率的に利用します。

他のヒント

Java ヒープ メモリ オペレーティング システムによって JVM に割り当てられたメモリの一部です。オブジェクトを作成するときは常に内部で作成されます Javaのヒープ.

Java ヒープ領域 と呼ばれるガベージ コレクションのために 3 つの領域または世代に分割されます。 若い世代、年配の世代または勤続年数のある世代、および永続的な世代. 。永続的な世代は、ホットスポット JVM でのフル gc 中にガベージ コレクションされます。

若い世代 すべての新しいオブジェクトが割り当てられ、保存される場所です。若い世代がいっぱいになると、小規模なガベージ コレクションが発生します。死んだオブジェクトでいっぱいの若い世代は非常に迅速に収集されます。生き残っている一部のオブジェクトは古くなり、最終的には古い世代に移行します。

旧世代 長く存続するオブジェクトを保存するために使用されます。通常、若い世代のオブジェクトに対してしきい値が設定され、その年齢に達すると、オブジェクトは古い世代に移動されます。最終的には古い世代を収集する必要があります。このイベントはメジャー ガベージ コレクションと呼ばれます。

永久世代 アプリケーションで使用されるクラスとメソッドを記述するために JVM で必要なメタデータが含まれています。永続世代は、アプリケーションで使用されているクラスに基づいて、実行時に JVM によって設定されます。

パーマジェン に置き換えられました メタスペース Java 8 リリース以降。 PermSize と MaxPermSize パラメータは無視されるようになります。これを見てください dzoneの記事 による ピエール - ユーグ シャルボノーがメタスペースについて理解する.

enter image description here

画像出典:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

詳細については、同じ記事を参照してください。

ヒープ内のすべてのオブジェクトは、参照されている間も存続します。それ以上にならない場合は、ガベージ コレクター (GC) がメモリを再利用します。

PermGen、Young、および Tenured は、オブジェクト (またはそれらが存在できるヒープ内のスペース) の異なる分類です。

PermGen: これらのオブジェクトは常に存在し、ガベージ コレクションされません。クラスオブジェクト、インターンされた文字列などが存在します。そこに GC があるかどうかはわかりません (システムがクラスをアンロードするとき...)でもそれは普通のことではない)

若い: オブジェクトが作成されると、それはここにあります。

在職期間: オブジェクトは、N 回の GC パスを生き残ったときにこの分類/カテゴリに移動します (生き残る = GC パスしますが、このオブジェクトは参照されるため、再利用できません)。

使用される GC といくつかのパラメータ化に応じて、GC が通過する頻度は多かれ少なかれ異なります。

ガベージ コレクションでは、ヒープ内のオブジェクトを管理するためのさまざまなアプローチが可能になります。このオブジェクトの分類は、これを行うのに役立ちます。

ここでは、さらに理解するのに役立つことがどのようにチューニング/サイズお使いのGCパラメータ、上の別の(長いが)優れた記事があります:

https://docs.oracle.com/するJavaSE / 8 /ドキュメント/技術情報/ガイド/ VM / gctuning /

非常に便利な読み取りを使用すると、GCの問題を有し、GCログを読んで、またはあなたの現在のGCのコレクタがどのように機能するかを理解する必要がある方法を知っておく必要がありますしている場合。

あなたは、リアルタイムのメモリ使用量を確認するために実行しているシステムの遠隔監視をフックアップしたいとGCは、このツールをチェックアウト実行している場合:

http://java.sun.com/performance/jvmstat/visualgc.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top