#Java が gc をトリガーするタイミング
##1. メモリのリサイクル戦略と共通の概念一般的なメモリ リサイクル戦略は、次の側面から理解できます。
1 シリアルとパラレルシリアル: シングル スレッドがメモリ リサイクル作業を実行します。非常にシンプルで同期などを考慮する必要がありませんが、時間がかかるためマルチCPUには向きません。
並列: 複数のスレッドがリサイクル作業を同時に実行します。マルチCPUに適しており、効率が高い。
2 同時実行性と世界の停止世界の停止: JVM 内のアプリケーション スレッドがハングし、ガベージ コレクション スレッドのみがガベージをクリーンアップするために動作します。 。シンプルで、汚れたリサイクルなどの問題を考慮する必要はありません。
同時実行性: ガベージ コレクションが実行されている間、アプリケーションも実行されます。アプリケーションの応答時間を確保します。リサイクルがクリーンではなく、二次リサイクルが必要になる場合もあります。圧縮: ガベージ コレクションの後、残ったオブジェクトは連続したスペースにスライドしてフラグメントをクリーンアップし、残りのスペースが確実に確保されます。連続した。
非圧縮: フラグメントを保持し、圧縮しません。
コピー: 残っているオブジェクトを新しいスペースに移動し、古いスペースをすべて解放します。 (より大きなメモリが必要です。)
ガベージ コレクション アルゴリズムは、上記の観点から検討および設計でき、最終的には、さまざまなシナリオに適したさまざまな特性を持つガベージ コレクタを生成できます。
2. JVM の YGC&FGCYGC: 新世代ヒープを GC します。ほとんどのオブジェクトは寿命が短く、新しい世代でリサイクルされるため、頻度は比較的高くなります。パフォーマンスコストは小さいです。
FGC: ヒープ全体のフル GC。 FGC は、デフォルトのヒープ領域使用率が 80% (調整可能) に達するとトリガーされます。実稼働環境を例にとると、FGC は通常、めったにトリガーされず、場合によっては 10 日に 1 回、または約 1 週間に 1 回トリガーされることがあります。
3. YGC はいつトリガーされ、FGC はいつトリガーされますか?● YGC のタイミング:
edn スペースが不十分です
● FGC のタイミング:
1. 古いスペースが不十分;
2. perm スペースが不十分;
3. RMI を含む System.gc() への呼び出しを表示します。など タイミング トリガー;
4. YGC 中の悲観的な戦略;
5. ライブ メモリ情報をダンプするとき (jmap –dump:live)。
YGC のトリガーのタイミングに関しては、eden スペースが不足していることは明らかであり、この時点で ygc が確実にトリガーされます。 FGC のトリガータイミング、古いスペース不足、パーマスペース不足、system.gc() の呼び出しは比較的明白であり、この場合、一般的に GC がトリガーされます。最も複雑なものは、いわゆる悲観的戦略です。これが引き起こすメカニズムは、最初に以前のプロモーション、つまり新しい世代から ygc を介して平均までのプロモーションの平均サイズを計算することです。新しい世代のサイズを計算し、古い世代の残りのスペースがプロモーション サイズより小さい場合、FullGC がトリガーされます。 SDKが考える戦略としては、平均的かつ長期的に見ると、次回はプロモーションスペースが不足する可能性が非常に高いので、それまでfullGCを待つのではなく、次回は必ずFullGCが発動すると悲観的に信じたほうが良いということです。まず FullGC を直接実行します。実際の使用プロセスからも、比較的安定した効果が得られています。
php 中国語 Web サイト、無料の Java 入門チュートリアル が多数あり、オンラインで学習することを歓迎します。
以上がJavaはいつGCをトリガーしますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。