ホームページ  >  記事  >  Java  >  JavaはいつGCをトリガーしますか

JavaはいつGCをトリガーしますか

angryTom
angryTomオリジナル
2019-11-18 09:46:064376ブラウズ

JavaはいつGCをトリガーしますか

#Java が gc をトリガーするタイミング

##1. メモリのリサイクル戦略と共通の概念

一般的なメモリ リサイクル戦略は、次の側面から理解できます。

1 シリアルとパラレル

シリアル: シングル スレッドがメモリ リサイクル作業を実行します。非常にシンプルで同期などを考慮する必要がありませんが、時間がかかるためマルチCPUには向きません。

並列: 複数のスレッドがリサイクル作業を同時に実行します。マルチCPUに適しており、効率が高い。

2 同時実行性と世界の停止

世界の停止: JVM 内のアプリケーション スレッドがハングし、ガベージ コレクション スレッドのみがガベージをクリーンアップするために動作します。 。シンプルで、汚れたリサイクルなどの問題を考慮する必要はありません。

同時実行性: ガベージ コレクションが実行されている間、アプリケーションも実行されます。アプリケーションの応答時間を確保します。リサイクルがクリーンではなく、二次リサイクルが必要になる場合もあります。


3 圧縮 & 非圧縮 ©

圧縮: ガベージ コレクションの後、残ったオブジェクトは連続したスペースにスライドしてフラグメントをクリーンアップし、残りのスペースが確実に確保されます。連続した。

非圧縮: フラグメントを保持し、圧縮しません。

コピー: 残っているオブジェクトを新しいスペースに移動し、古いスペースをすべて解放します。 (より大きなメモリが必要です。)

ガベージ コレクション アルゴリズムは、上記の観点から検討および設計でき、最終的には、さまざまなシナリオに適したさまざまな特性を持つガベージ コレクタを生成できます。

2. JVM の YGC&FGC

YGC: 新世代ヒープを 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。