ホームページ > Java > &#&チュートリアル > Java のガベージ コレクション: JDK 8 以降の進歩

Java のガベージ コレクション: JDK 8 以降の進歩

Susan Sarandon
リリース: 2025-01-04 05:03:40
オリジナル
549 人が閲覧しました

JDK 8 以降、Java のガベージ コレクション (GC) は大幅な進化を遂げ、レイテンシ、一時停止時間、メモリ オーバーヘッドなどの一般的な課題に対処しました。この記事では、JDK 8 などの古いバージョンから JDK 17 や JDK 21 などの最新バージョンに移行する開発者にとっての実際的な影響に焦点を当てて、これらの進歩について説明します。レガシー アプリケーションを維持している場合でも、将来の移行を計画している場合でも、これらの更新内容を理解することが重要です。

重要なポイント

  1. JDK 8 以降の改善点: JDK の新しいバージョンでは、メモリ管理とアプリケーションのパフォーマンスが大幅に強化されています。
  2. GC オプションについて: アプリケーションに適切なガベージ コレクターを選択すると、動作とリソースの使用量を最適化できます。
  3. 増分更新: 世代別 GC モードやリージョンベースのヒープ レイアウトなどの進歩により、ガベージ コレクションが変革され、スケーラビリティと効率が向上しました。

Java のガベージ コレクション (GC) はメモリ管理を自動化し、開発者を低レベルの詳細の処理から解放します。 GC の主な目標は次の 2 つです:

  1. 高速割り当て: Java は、同期不要の高速メモリ割り当てのためにスレッドローカル割り当てバッファ (TLAB) を使用します。
  2. 効率的な再利用: GC アルゴリズムは、圧縮や空きリストなどの技術を通じて未使用のメモリを再利用します。

最新の Java GC はヒープを 2 つの世代に分割します。

  • 若い世代: 存続期間の短いオブジェクトを保存します。コレクションは頻繁に行われますが、高速です。
  • 旧世代: 複数の GC サイクルを経ても存続する長寿命オブジェクトを格納します。

この分割は、ほとんどのオブジェクトが早期に消滅するため、完全なヒープ コレクションよりも若い世代のコレクションが効率的になるという世代仮説に基づいています。 Java は、特定のユースケースに合わせて調整されたいくつかの GC アルゴリズムを提供します。

ガベージ コレクター フォーカス 使用例 一時停止時間 スループット
Garbage Collector Focus Use Case Pause Time Throughput
Serial GC Low memory overhead Small containers Medium Low
Parallel GC High throughput Batch processing or large datasets High High
G1 GC Balanced performance General-purpose, low-latency workloads Medium-Low Medium-High
ZGC Ultra-low latency Large-scale applications, low latency Sub-millisecond Medium
Shenandoah GC Low latency Large heaps, near-real-time processing Very low Medium
シリアル GC メモリ オーバーヘッドが低い 小さなコンテナ 中 低 並列 GC 高スループット バッチ処理または大規模なデータセット 高い 高い G1 GC バランスの取れたパフォーマンス 汎用の低遅延ワークロード 中-低 中~高 ZGC 超低遅延 大規模なアプリケーション、低遅延 ミリ秒未満 中 シェナンドー GC 低遅延 大規模なヒープ、ほぼリアルタイムの処理 非常に低い 中 テーブル>

JDK 9 でデフォルトのコレクターとして導入された G1 GC は、リージョンベースのヒープ レイアウトを使用し、同時マーキングをサポートします。これにより、アプリケーション スレッドを停止せずに稼働状態を判断できます。 G1 は、若い世代と古い世代のコレクションを小さな混合コレクションに結合することで、一時停止時間を短縮し、全体的な応答性を向上させます。

Garbage Collection in Java: Progress Since JDK 8

超低レイテンシー向けに設計された ZGC は、ミリ秒未満の範囲の一時停止時間でテラバイトサイズのヒープを処理できます。ほとんどの作業はアプリケーション スレッドと同時に実行されるため、クラウド サービスや金融システムなど、一貫した応答性を必要とするアプリケーションに最適です。

ZGC 世代別モード (JDK 21 で導入) は、世代仮説を適用して存続期間の短いオブジェクトと存続期間の長いオブジェクトを区別することにより、スループットをさらに向上させます。

Garbage Collection in Java: Progress Since JDK 8

SPECjbb 2015 などのベンチマークは、JDK 8 以降の最新の GC アルゴリズム全体でスループットとレイテンシの両方が大幅に向上していることを示しています。

  • 並列 GC: JDK 8 から JDK 17 にスループットが 30% 向上しました。
  • G1 GC: JDK 8 から JDK 17 にスループットが 40% 以上向上しました。
  • ZGC: JDK 21 の世代モードにより 10% 改善されました。

一時停止時間の短縮

すべてのコレクターで一時停止時間が大幅に短縮されました:

  • 並列 GC: ~100ms ~ ~65ms。
  • G1 GC: JDK 8 から JDK 17 へ 40% 削減
  • ZGC: ミリ秒未満の一時停止。

Garbage Collection in Java: Progress Since JDK 8

Garbage Collection in Java: Progress Since JDK 8

G1 GC では、リージョンベースのコレクションに使用されるデータ構造である記憶されたセットの最適化により、ネイティブ メモリのオーバーヘッドが大幅に削減されました。 JDK 8 から JDK 17 まで、G1 のネイティブ メモリ使用量はほぼ半分に削減されました。 GC の実際的な側面をよりよく説明するために、次の例を検討してください:

例 1: G1 GC の構成

# Add these options to your JVM startup command
java -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -Xmx2g -Xms2g -jar app.jar
ログイン後にコピー

この構成:

  • G1 GC をアクティブ化します。
  • 目標の最大一時停止時間を 50 ミリ秒に設定します。
  • 2 GB のヒープ メモリを割り当てます。

低遅延アプリケーション向けに ZGC をチューニングする

java -XX:+UseZGC -Xms4g -Xmx4g -XX:SoftRefLRUPolicyMSPerMB=50 -jar app.jar
ログイン後にコピー

このセットアップ:

  • ZGC を使用して超低遅延を実現します。
  • 4GB のヒープ メモリを割り当てます。
  • メモリ管理を改善するためにソフト参照の有効期間を調整します。

JDK 8 を超えて移行する際の課題

JDK 8 から新しいバージョン (JDK 17 または 21 など) にアップグレードすると大きなメリットがもたらされますが、開発者は次の点を考慮する必要があります。

  • 互換性の問題: 特定のライブラリまたはフレームワークは、新しい JDK バージョンを完全にはサポートしていない可能性があります。
  • パフォーマンス チューニング: 各 GC には、最適なパフォーマンスを得るために調整が必要な場合がある特定のチューニング パラメーターがあります。
  • ステージング環境のテスト: 変更をロールアウトする前に、必ず非運用環境で徹底的にテストしてください。

JDK 8 以降の Java のガベージ コレクションの進歩は目覚ましいものがあります。スループット、レイテンシ、メモリ オーバーヘッドが大幅に改善されたため、どの Java アプリケーションでも新しい JDK バージョンへのアップグレードが必要です。

小規模なコンテナーを実行している場合でも、大規模なクラウド サービスを実行している場合でも、ユースケースに最適化された GC アルゴリズムがあります。したがって、まだ JDK 8 を使用している場合は、飛躍して最新の Java のパフォーマンス上の利点を享受する時期が来ています。

詳細については、Java のガベージ コレクションに関する Devoxx Belgium のビデオ: Stefan Johansson による JDK 8 以降の進歩をご覧ください

?

以上がJava のガベージ コレクション: JDK 8 以降の進歩の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート