私の連絡先情報
郵便メール:
2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
著者: ofLJli
リンク: https://juejin.cn/post/7003213289425633287?searchId=20240709085629749958B21D886D4E67D4
出典: レアアースナゲット
著作権は作者に帰属します。商業的転載の場合は、著者に連絡して許可を得てください。非商業的転載の場合は、出典を明記してください。
JVM の主な構造は、仮想マシン スタック、ヒープ、メソッド領域です。仮想マシン スタックのスタック フレームのサイズは、メソッドまたはスレッド テクノロジの終了とともにコンパイラによって決定され、仮想マシン スタックのメモリもリサイクルされます。 Java ヒープとメソッド領域には大きな不確実性があり、メモリのこの部分の割り当てとリサイクルは動的に行われます。GC が考慮するのは、メモリのこの部分を管理する方法です。
この記事では、GC が達成する必要がある次の 3 つのことに焦点を当てます。
2 つの世代仮説によると、次のようになります。绝大多数的对象都是朝生夕死
,熬过越多次的GC回收的对象就越难回收
。ヒープは、新しい世代 (Eden、From、To)、古い世代の世代に分割され、GC 中に世代のリサイクルも実行されます。
マイナーGC : 未使用のオブジェクトを新しい世代でリサイクルします。新しい世代のほとんどのオブジェクトの特徴は、一晩で生きて消えてしまうということです。トリガー時間は次のとおりです。
标记-复制算法
この領域をリサイクルします (後述)。メジャーGC : 古い世代の未使用のオブジェクトをリサイクルします。一般的な使用标记-清除算法
または标记-整理算法
リサイクルします。
フルGC : ヒープおよびメソッド領域内の未使用のオブジェクトをリサイクルします。 Full GC のリサイクル範囲は比較的広く、実行時間が長いとラグが発生する可能性があるため、Full GC の回数は可能な限り減らす必要があります。発動時間はおおよそ以下の通りです。
古い世代のスペース不足は、新しい世代のオブジェクトが古い世代に入る、大きなオブジェクトが古い世代に直接入るなどが原因で発生します。これらのオブジェクトが古い世代の最大連続スペースに格納できない場合は、フル GC リサイクルが実行されます。 。
メソッド領域の容量不足 メソッド領域には主に型情報と定数プールが格納されます。また、容量が不足する可能性があり、フル GC リサイクルが実行されます。
System.gc() は明示的に呼び出され、フル GC によってリサイクルされます。
原則: 使用する可达性分析算法
オブジェクトを使用不可にするマークを実行してから、クリア 。 欠点: オブジェクトが多い場合、マーキング効率が低くなります。オブジェクトをクリアした後は、メモリの断片化が発生し、メモリが不連続になります。 目的: 一部のコレクターは古い世代のコレクションでこのアルゴリズムを使用します。
原則: メモリ空間を 2 つに分割し、半分をオブジェクト ストレージに使用し、残りの半分を空き領域にします。オブジェクトが保存されている領域がいっぱいの場合は、次を使用します。可达性分析算法
生き物を移動させるマーク出てきて、それからコピー別の空のエリアに移動し、前のエリアをすべて空の連続スペースにクリアします。 欠点: 多くのオブジェクトが残っている場合、大量のメモリのコピーと開発が必要になります。メモリ空間は利点の半分しか利用できず、リソースを無駄にします。 機能: このリサイクル アルゴリズムは通常、新しい世代で生きて死ぬオブジェクトに使用されます。ただし、レプリケーション アルゴリズムは新世代で最適化されていますが、このアルゴリズムには、残っているオブジェクトが過剰に割り当てられることを防ぐための割り当て保証メカニズムが追加されています。 Appel スタイルのリサイクル アルゴリズムが使用されます。
原則: マーキングのプロセスは次のとおりです。标记-清除算法
それなら同じです整理存
ライブ オブジェクトが一方の端に移動し、その後ライブ境界の外側にあるすべてのオブジェクトが移動します清除
。 短所: オブジェクトの移動にはある程度のリスクが伴います。オブジェクトが多すぎると非効率になります。 機能: 主に高齢者向け。
GC で使用されるガベージ コレクターは、継続的な開発に伴い、ますます多くのガベージ コレクターが登場しています。これらは、シングル スレッド コレクター、マルチ スレッド コレクター、およびコンカレント コレクターの 3 つのカテゴリに分類されます。コレクション。
シングルスレッド コレクターの組み合わせは次のとおりです。 シリアル/シリアル オールド コレクター。コレクション スレッドを使用してコレクション操作を完了するだけでなく、コレクション スレッドが動作している間、ユーザー スレッドはコレクションが完了するまで待機を停止する必要があります。この図は、シリアル/シリアル オールド コレクターの回路図を示しています。
クライアントのメモリ リソースが限られている場合、プロセッサ コアの数が少ない場合、またはシングル コア プロセッサである場合、そのシンプルさと効率により、コレクタはできるだけ早く作業を完了できます。
マルチスレッド コレクターには、ParNew、Parallel Scavenge、および Parallel Old が含まれます。そのうち、Parallel Scavenge/Parallel Old は結合コレクターです。これらのマルチスレッド コレクターはガベージ コレクション スレッドを追加するだけであり、ユーザー スレッドは引き続きガベージ コレクションの待機を停止します。
parNew コレクター: 実際には Serial のマルチスレッド バージョンであり、現在 Serial コレクターおよび CMS コレクターと連携できます。
パラレル スカベンジ コレクター: 通常、パラレル オールド コレクターと組み合わせて使用されます。parNew コレクターと比較して、より注意を払っています。吞吐量
制御の場合、スループットはユーザー スレッドの実行時間は、CPU の合計実行時間を占めます。, スループットはもちろん大きいほど良いです。
マルチスレッドの実行はタイムスライスローテーションの消費時間を伴うため、シングルプロセッサだと処理効率は確実に遅くなります。ただし、リソースの節約には非常に優れており、ユーザーと対話する必要のないサーバー側の分析計算により、実行効率が向上します。
同時コレクタには以下が含まれます。 CMS コレクタは、システムの一時停止時間を可能な限り短く保ち、より良いユーザー エクスペリエンスを提供することを目的としたコレクタです。そのコレクション スレッドはユーザー スレッドと同時に実行できます。 CMSには3つある标记
(頭マーク、兼マーク、備考) と 1 回清理
(同時クリーンアップ)、3 つのマーキングのうち 2 つは短いユーザー スレッドの停止を必要とし、1 つの長いマーキングはユーザー スレッドと同時実行し、クリアはユーザー スレッドと同時実行する必要があります。
イニシャルマーク: GC ルートに関連付けられた最初のオブジェクトをマークします。時間は非常に短いです。 同時マーキング: GC Roots (到達可能性解析アルゴリズム) の参照チェーンをユーザースレッドと並行して実行するため、時間がかかります ラベルを付け直す : 同時マーキングフェーズ中にユーザースレッドによって生成された新しい参照チェーンを再検索します。最初のマークより少し長いです。同時クリア:使用标记-清除算法
不要なオブジェクトを削除します。
3 つの主な欠点: 1: CPU の感度、同時実行性が、コア数の少ないプロセッサ上のユーザー スレッドの動作に影響を与える可能性があります。 2: フローティング ガベージ: 同時クリーンアップ フェーズ中に生成されたガベージは、次の GC コレクションを待つことしかできません。 3: メモリの断片化、マーキング クリーニング Puja 製品には大量の不連続なメモリ領域があります。
この記事はから始まります那些内存需要回收
,什么时候回收
,如何回收
実装としては、2つのオブジェクト生存判定アルゴリズム、クラス領域リサイクルの条件、リサイクルの生成機構と収集タイミング、3つの収集アルゴリズムとよく使われるガベージコレクタが書かれています。