ホームページ >Java >&#&チュートリアル >JAVAのガベージコレクションメカニズム
ガベージコレクションはJAVAの大きな知識ポイントであり、有名な知識ポイントでもあります。結局のところ、JAVAは先進的であると主張するときに常にガベージコレクションをもたらします。その結果、面接ではガベージ コレクションとは何か、その原理について説明するように求められることがよくあります。もちろん、ガベージ コレクションについて質問した面接官は、99% がそれについて少ししか知りません。面接官がガベージ コレクション メカニズムとは何ですかと尋ねたら、真剣な態度で「ガベージ コレクション メカニズムについて質問しているのはどの VM ですか?」と尋ねる必要があります。
ガベージ コレクションに関連する概念とアルゴリズムは複雑であるため、詳細をすべて理解したい場合は、得るものよりも失うものの方が確実に多くなります。ただし、以下のガベージコレクションの仕組みの概要をマスターしておけば、ほとんどの面接で減点されることはないと思います。
1: ゴミとは何ですか?
たとえば、オブジェクトをもう使用しない場合、そのオブジェクトはゴミになります。例:
public void test01(){
User user = new User();
//...
}
test01 メソッドが実行された場合、ユーザー オブジェクトはもう役に立たず、ゴミになります。
2: ガベージ コレクションが必要なのはなぜですか?
オブジェクトがヒープに保存されることはわかっていますが、ヒープの大きさはどれくらいでしょうか?コマンド パラメータを通じて調整できますが、通常 32 ビット システムでは、Java ヒープ サイズは 2 GB に設定され、500 MB が新しい世代 (YoungGen) に割り当てられ、1.5 GB が古い世代 (OldGen) に割り当てられます。空間。 64 ビットであっても、PC にどれだけのハードウェア メモリを搭載できるかを考えてください。
つまり、無駄なゴミはすべてリサイクルされ、メモリ空間は他のオブジェクトに利用できるようになります。
3: JDK のデフォルトの HotSpot VM ガベージ コレクション メカニズム
1: ヒープ メモリの分類
このメカニズムを理解するには、まずヒープの分類を理解する必要があります。はい、オブジェクトがヒープ上に存在することだけがわかっていますが、次の図に示すように、ヒープの内部もいくつかの空間に分割されていることはわかりません。
内部はエデンに分かれており、2つの生存者スペースで構成されています。新しく作成されたすべてのオブジェクトは、新しい世代に割り当てられます。古い世代は、プログラム内で数回のガベージ コレクション後に生き残ったオブジェクトを保存するために使用されます(
追記) : 永続生成非ヒープ メモリは、Java クラス、メソッドなどの静的ファイルを保存するために使用されます。永続生成はガベージ コレクションに大きな影響を与えません
2: リサイクル順序
の実行順序。各スペースは次のとおりです:
新しく作成されたオブジェクトのほとんどは Eden スペースに保存されます。Eden スペースで最初の GC が実行された後、生き残ったオブジェクトは Survivor スペースの 1 つに移動されます。
その後、Eden空間でGCを実行すると、生き残ったオブジェクトが同じSurvival空間に積み上げられます。
Survivor スペースが飽和状態になると、生き残ったオブジェクトは別の Survivor スペースに移動されます。その後、飽和した生存者スペースがクリアされます。上記の手順を数回繰り返した後、まだ生きているオブジェクトが古い世代に移動されます。
IV: ガベージ コレクターとリサイクル アルゴリズム
新世代のシングルスレッドコレクター、マーキングとクリーニングは両方ともシングルスレッドであり、シンプルで効率的であるという利点があります。
Serial Old Collector (Marking-Collation Algorithm)
旧世代のシングルスレッド コレクター、旧世代バージョンのシリアル コレクター。
ParNew コレクター (ストップコピー アルゴリズム)
新世代のコレクターは、シリアル コレクターのマルチスレッド バージョンと考えることができ、マルチコア CPU 環境ではシリアルよりも優れたパフォーマンスを発揮します。
パラレル スカベンジ コレクター (ストップ コピー アルゴリズム)
パラレル コレクターは、高スループットを追求し、CPU を効率的に利用します。スループットは通常 99%、スループット = ユーザー スレッド時間/(ユーザー スレッド時間 + GC スレッド時間) です。高度なインタラクション応答を必要としないバックグラウンド アプリケーションなどのシナリオに適しています。
Parallel Old Collector (Stop-Copy Algorithm)
Parallel Scavenge Collector の旧世代バージョン、並列コレクター、スループット優先
CMS (Concurrent Mark Sweet) Collector (Mark-Sweet Algorithm)
高い同時実行性、低い一時停止、最短の GC リサイクル一時停止時間の追求、比較的高い CPU 使用率、速い応答時間、短い一時停止時間、高い応答時間を追求するにはマルチコア CPU が選択です
5: いつガベージが発生するかコレクションは実行されますか?
ガベージコレクションには、Scavenge GC と Full GC の 2 種類があります。
新しいオブジェクトが生成され、エデンのスペースへの適用に失敗すると、スカベンジ GC がトリガーされます。このとき、新しい世代に対してガベージ コレクションが実行されます。
古い世代 (Tenured) がいっぱいになり、永続世代 (Perm) がいっぱいになると、System.gc() が明示的に呼び出され、最後の GC 後に各ドメインのヒープの割り当て戦略が動的に変更され、フル GC が実行されます。 。
どのようなリサイクルであっても、すべてのゴミがリサイクルされるわけではなく、アルゴリズムが独自に判断した時間と量に基づいて一定期間内に一定量のゴミが除去されることに注意してください。私たちには未知です。
上記は、必ず知っておくべきガベージコレクションのメカニズムです。
以上がJAVAのガベージコレクションメカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。