ジャワ - 詳細GCガベージコレクタ(C)

前のコレクタ特性

  1. 歳と若い世代は独立しており、メモリの連続ブロック
  2. 若い世代は、単一のエデン+ S0 + S1複製アルゴリズムを使用して収集する必要があります
  3. スキャンの古いコレクション全体の古い地域
  4. 彼らは、GCの設計原理のために迅速かつできるだけ実行することになっています

G1とは何ですか

G1(ガベージ・フリスト)コレクタのために設計されているサーバ側コレクタアプリケーション

説明の公式サイトから、我々は可能な限り、スループットを向上させながらそのG1は、ガベージコレクション休止時間の要件を満たすために、マルチプロセッサや大容量メモリ環境でのアプリケーションサーバー側ガベージコレクションである知っています。また、それは次の特徴があります。

  1. CMSコレクタ等のアプリケーションスレッドができ、同時に実行します
  2. 空き領域の高速化統合
  3. 私たちはしてより多くの時間を必要とするGC休止時間を予測します
  4. 私たちは、スループット性能の多くを犠牲にしたくありません
  5. それは、より大きなJavaヒープを必要としません。

G1コレクタ設計目標は、CMSコレクタを交換することです、それは、CMSと比較され、以下の分野で優れたパフォーマンス:

  1. G1は、ガベージコレクタのメモリの統合プロセスであり、メモリの断片化の多くを生成しません
  2. G1のStop-世界(STW)より制御は、G1は、ユーザが所望の滞留時間を指定することができ、滞留時間に予測機構を追加します。

CMSガベージコレクタの一時停止アプリケーションの実行中の時間を削減しながら、それはまだメモリの断片化の問題が存在します。だから、CMSガベージコレクタ低休止時間の優位性を維持しながら、メモリの断片化の問題を除去するために、Java7は、新しいガベージコレクタ-G1のガベージコレクタをリリースしました

G1は、2012年にjdk1.7u4でのみ使用可能です。Oracleは、公式計画するCMSを置き換えるために、G1のデフォルトのガベージコレクタjdk9なりますこれは、サーバーのパフォーマンスを強化し、徐々にjava8前のCMSコレクタを置き換えるために、主に大幅に一時停止時間ガベージコレクションを減らし、大容量メモリとマルチCPUサーバ環境で使用される、サーバーアプリケーションのコレクターのために設計されています。

主な変更点は、エデン、サバイバーや終身およびその他されたメモリ領域は、もはや連続ではありませんが、むしろ1と同じ大きさの地域になった、1Mから32Mまでの各地域。領域はエデン、サバイバーや終身メモリ領域に属していてもよいです。

G1の特長

  1. G1は、(GC休止時間後に他のスレッド)STWを短くしようとすると、マルチCPU、マルチコアハードウェアの利点環境をフルに活用することができます
  2. 全体としてマーク使用G1 -照合アルゴリズムは、局所的なアルゴリズム、なしメモリの断片をコピーすることによってです。
  3. ビューG1のマクロポイントの中で、もはや若い世代と古い時代を区別しません。別のメモリ領域(地域)に分割チェスボードは理解されるように、近似することができます。
  4. 全メモリ領域についてだったG1コレクタは混合一緒にいるが、それ自体が若い世代と古い時代を区別するために小さな領域にまだある、古いものと新しい世代のを保持し、彼らはもはや物理的に分離されていませんしかし、収集領域領域の一部は連続しており、まだ別のGC面積を処理するためのさまざまな方法を使用することを必要としません。
  5. G1は世代コレクターですが、全体のメモリパーティションは、若い世代を区別し、古い時代には、物理的に存在していませんが、完全に別の生存者(tospace)コピーを行うにヒープに必要のない
    準備を。G1のみ世代論理的な概念、または各パーティションは、G1と動作の異なる世代間で前後に切り替えることができます。

G1基本原理

地域の地域化のガベージコレクタ

  1. 回避メモリ領域の地域化のダイシング、個別のメモリ領域の全シリーズのための準備、全メモリ領域のGC操作を
  2. 核となるアイデアは、ヒープメモリ領域全体で同じであるが自動的に起動JVMでこれらのサブ領域のサイズを設定するサブ領域の大きさ(領域)に分割され、ヒープにおいて、G1は、ストレージオブジェクトを必要としない、物理的に連続している必要があります限りに論理的に連続した各パーティションは、世代のサービスのために固定されることはありません、需要が古いと若い世代の間で切り替えることができます。パラメータ-XXによって開始:G1HeapRegionSize = Nパーティションサイズ指定することができる(1メガバイト〜32メガバイトを、2の累乗でなければならない)スタック全体が2048個のパーティションに分割され、デフォルトでは、。
  3. IMB、32メガバイトのサイズの範囲、すなわち、それはメモリの最大値をサポートすることができる2048の領域まで設け:32MB2048 = 65536メガバイト= 64Gメモリ

G1は、ヒープアルゴリズムはいくつかのゾーン(地域)に分けられますが、それはまだ(小宇宙に古い時代が存在して動作させるために、若い世代を転送する必要があります)世代コレクタに属し

これらのいくつかは、新世代の領域を含む、ガベージコレクションの新世代は、まだ使用している方法のすべてのアプリケーションスレッドを中断し、ライブオブジェクトは、または遺族古い領域にコピーされます。

これらのいくつかは、クリーンアップを完了するために、あるエリアから別のエリアにオブジェクトをコピーして歳、G1コレクタの領域を含みます。通常のプロセスでは、G1は、圧縮のスタックを完了したことを、この手段(またはヒープ圧縮の少なくとも一部)ので、メモリの断片化CMSの問題はないだろう。

G1において、作品Humongous(大きな)領域と呼ばれる特別な領域があります

オブジェクトが50%以上のパーティションサイズの占有スペースを超えた場合、G1コレクタは、これは巨大なオブジェクトだと思います。これらの巨大なオブジェクトは古い世代に直接、デフォルトで割り当てられているが、それは短命の大規模なオブジェクトであれば、それはガベージコレクタにマイナスの影響を与えることになります。この問題を解決するために、G1は巨大なオブジェクトを格納するために特に使用される作品Humongous領域を、分割しました。H領域は巨大なオブジェクトに合わせた場合、G1は店に連続したHパーティションを探します。時々連続Hエリアを見つけて、できるようにするために全GCを開始する必要があります

G1回復ステップ

G1パラメータ設定の一部

  • -XX:+UseG1GC
  • -XX:G1HeapReginSize=n 设置的G1区域的大小。值是2的幂,范围是1MB到32MB。目标是根据最小的Java堆大小划分出约2048个区域
  • -XX:MaxGCPauseMillis=n 最大GC停顿时间,这是个软目标,JVM将尽可以(但不保证)停顿小于这个时间
  • -XX:InitiatingHeapOccupancyPercent 堆占用了多少的时候就触发GC,默认为45
  • -XX:ConGCThreads 并发GC使用的线程数
  • -XX:G1ReservePercent 设置作为空闲空间的预留内存百分比,以降低目标空间溢出的风险,默认是100%

和CMS相比的优势

比起CMS有两个优势:
1.G1不会产生内存碎片
2.G1可以精确控制停顿。该收集器是把整个堆(新生代、老年代)划分成多个固定大小的区域,每次根据运行 停顿的时间去收集垃圾最多的区域。

おすすめ

転載: www.cnblogs.com/cjunn/p/12233492.html