ホームページ  >  記事  >  Java  >  ホットスポット -- ガベージ コレクター (JVM) の詳細な説明

ホットスポット -- ガベージ コレクター (JVM) の詳細な説明

巴扎黑
巴扎黑オリジナル
2017-07-17 11:51:081960ブラウズ

最初の 2 つの記事「JVM の概要 - ランタイム データ領域」と「JVM の一般的なガベージ コレクション アルゴリズム」では、実際に JVM の仕様と一般的に使用されるガベージ コレクション アルゴリズムについて言及しました。具体的な JVM の実装は、実際には複数種類あります。 、JRockitJ9が待機していますが、もちろん最も有名なものはHotSpot JVMです。以下は HotSpot JVM の全体的なアーキテクチャ図です。この記事では、HotSpot のガベージ コレクター (ガベージ コレクター) に焦点を当てます。

既存のHotSpotガベージコレクタとその関係と適用範囲を以下の図に示します:

その中のG1新品では非常に目立ちますlife 新世代と旧世代の間では、このG1 GCは新世代でも旧世代でも使えると推測できます。まさに、G1は画期的なものであると言えます。新しいコンセプトGCを作っています。 上記のガベージコレクターを紹介する前に、まず

Client仮想マシンのServerモードについて説明する必要があります。Javaができることはクライアントであることです。簡単に言えば、GUIデスクトップアプリケーションであり、第二に、サーバーサイドとして使用できます。 2 つのモード: クライアント モードは起動が速く、起動後のパフォーマンスが低くなります。 サーバー モードは起動が遅く、起動後のパフォーマンスが高くなります。 Serial GC (

-XX:+UseSerialGC、コピーアルゴリズム、新世代)これは比較的古いガベージコレクトですまたは、わかりましたシンプルで粗雑な

。シンプルで粗雑なメソッドは、多くの場合、単純な環境を処理できます。実際、クライアントモードでもまったく同じです。これはシリアル ガベージ コレクターです。シリアルとは、マルチコア プロセッサであっても、複数のスレッドを並行して収集できないことを意味します。シリアルである間は、他の通常の動作スレッドも停止します。これは、 「世界を止めてください」 と呼ばれます。 。これは非常に簡単に理解できますが、ゴミを掃除しているときに、同時に誰かにゴミを捨ててほしくないのです。もちろん、シリアル GC は、今日の HotSpot JVMServer モードではほとんど放棄されています。さらに、Javaヒープの若い世代で動作するガベージコレクションコピーアルゴリズムを使用して動作します。

ParNew GC(-XX:+UseParNewGC, コピーアルゴリズム, 新世代)

ParNew GC実はそれSerial GCのマルチスレッドバージョンです。前述したように、シリアル GC マルチコア CPU 環境でも、ガベージ メモリを再利用するために単一のスレッドが使用されます。このガベージ コレクター側は、マルチスレッド環境でガベージ メモリをリサイクルできます。このマルチスレッドは、ユーザー スレッドと並行して実行されるのではなく、ガベージ コレクションのマルチスレッドにすぎません。そしてCMSの旧世代ガベージコレクターでのみ使用可能であり、CMSはまさに画期的なガベージコレクターなので、JVMの旧世代ガベージコレクターがCMS、新世代のガベージコレクターは通常、ParNew GCです。

Parallel GC (-XX:+UseParallelGC、コピーアルゴリズム、新世代)

ParaNew GCとどことなく似ており、名前からもパラレルですマルチスレッド収集デバイス。前に、GCのプロセス中に「Stop the world」を行う必要があると述べましたが、多くのガベージ コレクター (最初の 2 つを含む) は、一時停止を改善する方法に重点を置いています。時間。そして、並列 GC はスループットに重点を置いています。ガベージ コレクションの全体的な時間が短い場合、スループットは高く、CPU はタスクの実行により多くの時間を費やすことができます, (スループット )。 = タスク実行時間 /(タスク実行時間 + ガベージコレクション時間))

Serial Old GC (-XX:+UseSerialOldGC、マーク付き-圧縮アルゴリズム、古い世代)

Serial GC旧バージョンも同様ですシングルスレッドで、旧世代の GC と同様に Parallel GC でも使用できます。

Parallel Old GC (-XX: +UseParallelOldGC、マーク付き-圧縮アルゴリズム、旧世代)

新世代ではParallel GCを選択し、旧世代ではSerial Old GCしか選択できないジレンマを回避するために、Parallel GC——Parallel Old GCの旧世代版が登場しました。したがって、高いスループットを必要とするいくつかの定数を使用する場合は、Parallel GCParallel Old GC の組み合わせが適切な選択となります。 CMS GCほぼ

JVM

旧世代のガベージコレクタの半分を占めており、その画期的な意義は、ガベージコレクションスレッドがユーザースレッドとほぼ同時に動作できることです。 もうすぐは、まだ出来ないし、「世界を止めろ」も必要ないからですが、できるだけ一時停止時間を短くします。

ガベージ コレクション プロセス全体は、次の 4 ステップに分割できます: 初期マーキング同時マーキングリマーキング

同時クリーンアップ これ

4つのステップ 実際のプロセス 上記は、ユーザースレッドと同時に動作することです。つまり、
  1. ゴミを投げると同時に掃除する

    これは問題を引き起こします。マーク後にゴミが発生した場合は、次回のリサイクルまで待つだけです。もちろん、マーキングが完了した後は、当然ゴミはユーザースレッドと競合することはなくなり、クリーンアップ処理もユーザースレッドと同時に処理できるようになります。このガベージ コレクターのより明らかで避けられない問題の 1 つは、
  2. "

    mark
  3. -

    clear
  4. "

    アルゴリズムを使用していることです。これは、存続するオブジェクトを圧縮しないことを意味します。メモリ空間の断片化の問題については、連続して大きなメモリ空間を割り当てる必要がある場合、
フル GC

を 1 回だけトリガーできます。前の記事「JVM の一般的なガベージ コレクション アルゴリズム」では、新世代のガベージ コレクションは "マイナー GC" と呼ばれ、古い世代のガベージ コレクションは "メジャー GC" と呼ばれると述べました。 " "Full GC" は、ヒープ全体でガベージ コレクションをトリガーします。コストが非常に高くなることが考えられ、この時点でユーザー スレッドを一時停止する必要があります。調整できるのは のパラメーターのみです。特定の使用シナリオに合わせて CMS GC を調整して最適化します。 ガベージファースト(G1) GC (-XX:+UseG1GC)

G1 GCは、これまでのすべてのガベージコレクターとは異なります。最初の2番目の写真からわかるように、新しい世代と古い世代をカバーするか、論理的にのみ保持されます 「新しい」という用語は、世代旧世代」は実際にはもう存在しません。JDK6では実験版であり、JDK7u4では正式に商用化されませんこのガベージ コレクターについては、後で別途説明します。また、その文書のアドレスは http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1&rep=rep1&type=pdfです。 。

以上がホットスポット -- ガベージ コレクター (JVM) の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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