Java 仮想マシン学習 - ガベージ コレクター
HotSpot JVM コレクター
上記の 7 つのコレクターがあり、上位世代コレクターと下位世代コレクターの 2 つの部分に分かれています。 2 つのコレクター間に接続がある場合は、一緒に使用できます。
シリアル (シリアル GC) コレクター
シリアル コレクターは、コピー アルゴリズムを使用してシングル スレッドで実行される新世代のコレクターです。ガベージ コレクションの実行中は、他のすべてのワーカー スレッド (ユーザー スレッド) を一時停止する必要があります。これは、Jvm クライアント モードのデフォルトの新世代コレクターです。単一 CPU に限定された環境の場合、シリアル コレクターにはスレッド相互作用のオーバーヘッドがないため、ガベージ コレクションに重点を置くことで、自然に最高のシングル スレッド コレクション効率を達成できます。
ParNew (並列 GC) コレクター
ParNew コレクターは、実際には、ガベージ コレクションに複数のスレッドを使用することに加えて、残りの動作は次のとおりです。シリアルコレクターと同じです。
Parallel Scavenge (Parallel Recycling GC) Collector
Parallel Scavenge コレクターも、コピー アルゴリズムを使用する並列マルチスレッド コレクターです。並列 Scavenge コレクターの特徴は、CMS などのコレクターの焦点がガベージ コレクション中のユーザー スレッドの一時停止時間をできるだけ短縮することであるのに対し、並列 Scavenge コレクターの目的は他のコレクターとは異なることです。実現可能な制御されたスループットを達成することです。スループット = プログラム実行時間 / (プログラム実行時間 + ガベージ コレクション時間)、仮想マシンは合計 100 分間実行されました。このうち、ガベージコレクションには 1 分かかり、スループットは 99% です。
Serial Old (Serial GC) コレクター
Serial Old は、単一のスレッドを使用して収集を実行します。マークアンドオーガナイズ」アルゴリズム。主にクライアント モードの仮想マシンで使用されます。
Parallel Old (Parallel GC) Collector
Parallel Old は、マルチスレッドと「mark-compact」アルゴリズムを使用する Parallel Scavenge コレクターの旧世代バージョンです。
CMS (同時マークスイープ) コレクターは、最短の収集休止時間を取得するように設計されています。ターゲットコレクター。 CMS コレクターは、「マーククリア」アルゴリズムに基づいて実装されており、収集プロセス全体は、
①の 4 つのステップに分かれています。
②.CMS同時実行マーク
③.CMS発言
④.CMS同時スイープ
初期マーキングと再マーキングの 2 つのステップでは、依然として他のユーザー スレッドを一時停止する必要があります。初期マーキングでは、GC ROOTS が直接関連付けることができるオブジェクトのみがマークされます。これは非常に高速です。同時マーキング ステージは、オブジェクトが生きているかどうかを判断する GC ROOTS ルート検索アルゴリズムのステージです。再マーキング フェーズでは、同時マーキング期間中にユーザー プログラムが実行され続けたために変更されたオブジェクトのその部分のマーキング レコードを修正します。このフェーズの一時停止時間は、最初のマーキング フェーズよりもわずかに長くなります。ただし、同時マーキングフェーズよりも短いです。
コレクター スレッドは、プロセス全体で最長の同時マーキングおよび同時クリア プロセス中にユーザー スレッドと連携して動作できるため、全体として、CMS コレクターのメモリ リサイクル プロセスは実装されたユーザー スレッドと同時になります。
CMS コレクターの利点: 同時収集、短い一時停止ですが、CMS は完璧には程遠いですが、主に 3 つの重大な欠点があります:
CMS コレクターは CPU リソースに非常に敏感です。並行フェーズでは、ユーザー スレッドが一時停止することはありませんが、CPU リソースが占有され、参照プログラムの速度が低下し、合計スループットが低下します。 CMS によって開始されるリサイクル スレッドの数は、デフォルトで次のようになります: (CPU の数 + 3) / 4。
CMS コレクターは浮遊ガベージを処理できず、「同時モード障害」が発生する可能性があり、失敗後に別のフル GC が発生する可能性があります。 CMS の同時クリーンアップ フェーズ中もユーザー スレッドは実行されているため、プログラムが実行されて加熱されると、新しいガベージが生成され続けます。この部分のガベージは、CMS がこのコレクションで処理できず、処理する必要がある後に表示されます。次の GC を待ちます。このゴミの部分を「浮遊ゴミ」といいます。また、ガベージ コレクション フェーズでもユーザー スレッドを実行する必要があるため、ユーザー スレッドが使用するために十分なメモリ領域を予約する必要があるため、CMS コレクターは古い世代がほぼ完全に埋まるまで待つことができません。収集する前に他のコレクターを実行する必要があります。同時収集中のプログラム操作のためにメモリ領域の一部を予約する必要があります。デフォルト設定では、古い世代の領域の 68% が使用されたときに CMS コレクターがアクティブ化され、パラメーター -XX:CMSInitiatingOccupancyFraction の値を通じてトリガーの割合を指定して、メモリーのリサイクル回数を減らし、改善することもできます。パフォーマンス。 CMS の動作中に予約されたメモリがプログラムの他のスレッドのニーズを満たすことができない場合、「同時モード障害」障害が発生します。この時点で、仮想マシンはバックアップ プランを開始します。つまり、シリアル オールド コレクタが一時的に有効になります。古い世代でガベージを収集するため、一時停止が非常に長くなります。したがって、パラメータ -XX:CMSInitiatingOccupancyFraction の設定が高すぎると、「同時モード障害」が発生しやすくなり、パフォーマンスが低下します。
最後の欠点は、CMS が「mark-clear」アルゴリズムに基づいたコレクターであるため、「mark-clear」アルゴリズムを使用して収集した後、大量のフラグメントが生成されることです。スペースフラグメントが多すぎると、オブジェクトの割り当てに多くの問題が発生します。たとえば、大きなオブジェクトの場合、メモリスペースは割り当てるための連続したスペースを見つけることができず、事前にフル GC をトリガーする必要があります。この問題を解決するために、CMS コレクターは -XX:UseCMSCompactAtFullCollection スイッチ パラメーターを提供します。これは、フル GC の後に最適化プロセスを追加するために使用されます。また、-XX:CMSFullGCBeforeCompaction パラメーターを使用して、非圧縮フルを実行する回数を設定することもできます。 GC に続いてデフラグ プロセスを実行します。
G1 コレクター
G1 (Garbage First) コレクターは、JDK1.7 によって提供される新しいコレクターです。 G1 コレクターは、「マーク照合」に基づいています。つまり、メモリの断片化は発生しません。もう 1 つの特徴は、以前のコレクターは新世代または旧世代全体を収集していたのに対し、G1 は Java ヒープ全体 (新世代と旧世代を含む) を収集していたことです。
ガベージコレクターパラメータの概要
-XX:+
-XX:-
-XX:<オプション>=<数値>
-XX:<オプション>=<文字列>
パラメータ 説明 -XX:+UseSerialGC
クライアント モードで実行するための Jvm のデフォルト値。このスイッチをオンにした後、メモリの再利用のために Serial + Serial Old のコレクターの組み合わせを使用します -XX:+UseParNewGC このスイッチは、ガベージ コレクションに ParNew + Serial Old コレクターを使用します -XX:+UseConcMarkSoupGC メモリのリサイクルには ParNew + CMS + Serial Old コレクターの組み合わせを使用します。Serial Old は CMS として表示されます。同時「モード失敗後にフォールバック コレクターが使用されます」失敗。 -XX:+UseParallelGC Jvm は、このスイッチをオンにした後、Parallel Scavenge + Serial Old Collector の組み合わせを使用してリサイクル + します。 パラレル
リサイクルのための古いコレクターの組み合わせ-XX:SurvivorRatio 新世代におけるEdenエリアとSurvivorエリアの容量比、デフォルトは8、つまりEden:Subrvivまたは= 8 :1 -XX:PretenureSizeThreshold このパラメータを設定すると、このパラメータより大きいオブジェクトは古い世代に直接割り当てられます。 -XX:MaxTenuringThreshold マイナー GC が発生するたびに、オブジェクトの経過時間が 1 ずつ増加します。このパラメータの値を超えると、古い世代に入ります。世代 -XX:UseAdaptiveSizePolicy 動的調整 Javaヒープの各領域のサイズと旧世代に入る年齢 -XX : +HandlePromotionFailure マイナーGCの後、別のブロックで新しい世代が保証を収集できるかどうかSurvivorスペースが不十分な場合、古い世代で直接予約されます -XX:ParallelGCThreads メモリリサイクルのために並列GCで使用されるスレッド数を設定します -XX:GCTimeRatio の比率合計時間に対する GC 時間。デフォルト値は 99 で、GC 時間の 1% が許容されます。 GC の最大一時停止時間を設定します。Parallel Scavenge コレクターで有効です -XX:CMSInitiatingOccupancyFraction 古い世代のスペースがどれだけ使用された後に CMS コレクターがガベージ コレクションを開始するかを設定します。デフォルト。値は 68% で、これは CMS コレクターでのみ有効です。 -XX:CMSInitiatingOccupancyFraction=70 -XX:+ UseCMSCompactAtFullCollectionCMS コレクターはフラグメントを生成するため、このパラメーターはガベージ コレクターの後にメモリ デフラグ プロセスが必要かどうかを設定します。これは CMS コレクターを使用する場合にのみ有効です -XX:+CMSFullGCBeforeCompaction 数回後にメモリ デフラグ プロセスを実行するように CMS コレクターを設定します。ガベージ コレクション。通常は UseCMSCompactAtFullCollection パラメーターとともに使用されます -XX:+UseFastAccessorMethods オフにするかどうかマニュアル System.gc 元の型の最適化
-XX:+Disable ExplicitGC マークの一時停止を減らす -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes メモリ ページのサイズはあまり大きく設定できません。これは Perm、-XX:LargePageSizeInBytes=128m のサイズに影響します
クライアントおよびサーバー モードのデフォルト GC
新世代のGCメソッド 古い世代と永続的な世代GCメソッド クライアント
シリアルシリアルGC Serial Old Serial GC Server パラレル スカベンジ パラレル スカベンジ
Sun/oracle JDK GC結合方式
新世代GC方式 旧世代と永続性生成GCメソッド -XX:+UseSerialGC
シリアルシリアルGC シリアル古いシリアルGC -XX:+ParallelGC を使用する Parallel Scavenge Parallel Scavenge Serial Old ParNew Parallel GCパラレルGC CMS Concurrent GC 表示される場合 「Concurrent Mode Failure」を使用した場合、Serial Old シリアルGCParNew
-XX:+UseParNewGCパラレルスカベンジリサイクルGC シリアル古いシリアルGC -XX: +UseParallelOldGC パラレルオールドパラレルGC -XX:+UseConcMarkSweatGC -XX:+UseParNewGC Serial シリアル GC 古いシリアルを使用
CMS 同時 GC " 同時Mode Failure」と表示されるシリアルGCを使用
上記は Java 仮想マシン学習です - ガベージ コレクターの内容。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.ん)!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4
