Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検...
Search
Daishi Tabata
May 30, 2026
Technology
1.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検証&解説
Daishi Tabata
May 30, 2026
More Decks by Daishi Tabata
See All by Daishi Tabata
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
2.2k
Generational ZGCのメモリ運用改善 - その物理メモリ使用量、本当に正しい?
tabatad
1
860
失敗しないOpenJDKの非互換調査
tabatad
1
2.2k
Other Decks in Technology
See All in Technology
【公開用】AI_Dev_Ex2026_AI_登壇資料
matsuritechnologies
PRO
1
420
なぜ、あなたのAPIは使われないのか? AX時代の設計原則、ガードレール、運用体制
yokawasa
1
190
20260720_クラウド女子会×PyLadiesTokyoコラボ Amazon Bedrock ハンズオン用資料
yuuka51
1
100
Making sense of Google’s agentic dev tools
glaforge
1
300
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
2
600
『モデル + ハーネス』で読み解く AIエージェント入門
oracle4engineer
PRO
2
150
[Droidcon Orlando '26] The Android Lens: Applying Mobile Forensics to AI Performance
amanda_hinchman
1
100
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.5k
インシデント事例と パッケージの全量解析に学ぶ ソフトウェアサプライチェーンの守り方 / supply-chain-attack-defense
flatt_security
0
830
全員がリーダーである世界へ キリマンジャロ登頂とシェアド・リーダー
jinwatanabe
0
120
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
690
AI時代の開発生産性を捉え直す — 経営と現場をつなぐ「開発組織のオブザーバビリティ」— / AI Dev Ex Conference 2026
tkyowa
1
1.2k
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.1k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Agile that works and the tools we love
rasmusluckow
331
22k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Leo the Paperboy
mayatellez
8
1.9k
Producing Creativity
orderedlist
PRO
348
40k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The Curious Case for Waylosing
cassininazir
1
440
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Transcript
JEP 522 Deep Dive – G1 GC同期コスト削減による スループット向上を徹底検証&解説 2026/5/30 田端
大志 © 2026 Fujitsu Limited JJUG CCC 2026 Spring @tbtdis
アジェンダ G1 GCのスループット JEP 522のアプローチ解説 デモ&性能評価
3 © 2026 Fujitsu Limited 自己紹介 3 OpenJDK JDK Project
Author JCP Executive Committee メンバー Adoptium WG メンバー 田端 大志 富士通株式会社 ソフトウェアエンジニア
アジェンダ G1 GCのスループット JEP 522のアプローチ解説 デモ&性能評価
5 © 2026 Fujitsu Limited G1 GCってどんなGC? •Java 9以降、ほとんどの環境でデフォルトのGC (参考)Java
27からすべての環境でデフォルトになる予定[JEP 523] •スループットと応答性のバランスを取ることを目指すGC GC種別 スループット 応答性 Parallel GC 高 低 G1 GC 中 中 ZGC 低 高
6 © 2026 Fujitsu Limited G1 GCの応答性 稼働 停止 Parallel
GC 稼働 アプリスレッド GCスレッド アプリスレッド GCスレッド G1 GC 待機 待機 稼働 稼働 停止 稼働 アプリの停止 = Stop The World(STW) 1回のSTWを短くすることで高い応答性を実現 停止 稼働 並行稼働 稼働 並行稼働 稼働 並行稼働
7 © 2026 Fujitsu Limited G1 GCのスループット G1 GC 応答性のための並行稼働の代償
•同時にCPUを使用するためアプリが使えるCPUが減る •オブジェクトの参照更新のたびに同期処理が必要 アプリスレッド GCスレッド アプリケーションのスループットが低下 稼働 停止 稼働 停止 稼働 並行稼働 稼働 並行稼働 稼働 並行稼働 本日の トピック
8 © 2026 Fujitsu Limited GC発生時の参照先更新処理 Javaヒープ a foo x
Foo foo; foo.a = x; 参照 リージョン(領域)
9 © 2026 Fujitsu Limited GC発生時の参照先更新処理 Javaヒープ a foo x
Foo foo; foo.a = x; 参照 GC対象 リージョン
10 © 2026 Fujitsu Limited GC発生時の参照先更新処理 Javaヒープ a foo Foo
foo; foo.a = x; 参照 x x’ GCがオブジェクトを移動 GC対象 リージョン
11 © 2026 Fujitsu Limited GC発生時の参照先更新処理 Javaヒープ a foo Foo
foo; foo.a = x; x x’ 参照 GCがオブジェクトを移動 参照先を更新 xがfoo.aから参照されている情報がないため、 xが移動したことをfoo.aに伝えられない
12 © 2026 Fujitsu Limited Remember Set Javaヒープ a foo
x Foo foo; foo.a = x; 参照 xがfoo.aから参照されている情報を保持 Remember Set(RSet) … … … … … … 0x1234 … …
13 © 2026 Fujitsu Limited Remember Setを使った参照先の更新 Javaヒープ a foo
Foo foo; foo.a = x; … … … … … … x x’ 参照 ①Remember Setを確認 ②xがfoo.aから参照されている情報を取得 ③GCによってxがx’に移動 ④foo.aの参照先をx’に更新 0x1234 … …
14 © 2026 Fujitsu Limited Remember Setの準備 Javaヒープ a foo
Foo foo; foo.a = x; … … … … … … x x’ 参照 どうやってこの 情報を準備する? 0x1234 … …
15 © 2026 Fujitsu Limited Remember Setの準備方法 •Step 1 •カードテーブルとDCQ(Dirty
Card Queue)を作成 ➢参照の更新が行われたJavaヒープの特定に活用 •Step 2 •カードテーブルとDCQを使ってRemember Setを更新 ➢この処理をRefinementと呼ぶ
16 © 2026 Fujitsu Limited [Step 1] カードテーブル・DCQを作成 a foo
a foo ~ ~ ~ ~ ~ ~ ・・・ 512バイト ~ ~ ~ ~ ~ ~ カードテーブル 1バイト (カード) fooが存在する リージョンを 拡大表示 Javaヒープの512バイトを 1バイトのカードにマッピング = = = = = =
17 © 2026 Fujitsu Limited [Step 1] カードテーブル・DCQを作成 a foo
a foo ~ ~ ~ ~ ~ ~ ・・・ ~ ~ ~ ~ ~ ~ カードテーブル 参照を更新するときに 対応するカードをマーク(Dirtyにする) 0x1234 … DCQ(Dirty Card Queue) カードをDirtyにしたら カードのアドレス(0x1234)を DCQにエンキュー x = = = = = = Foo foo; foo.a = x; 参照
18 © 2026 Fujitsu Limited [Step 2] Refinement •Dirtyカードを処理してRemember Setを更新
•GCがオブジェクトを移動する前に実行される必要あり •GCのSTW中にも行われる ①DCQから処理対象のカードを取得 ②カードのマークを外す ③対応するヒープをみて参照先取得 ④参照元に対応するカードのアドレスを 参照先リージョンのRsetに記録 Refinementのプロセス
19 © 2026 Fujitsu Limited [Step 2] Refinementのプロセス Javaヒープ a
foo x 参照 … … … … … … … … … カードテーブル ・・・ 0x1234 …
20 © 2026 Fujitsu Limited [Step 2] Refinementのプロセス Javaヒープ a
foo x 参照 … … … … … … … … … カードテーブル ・・・ 0x1234 … ①DCQから処理対象のカードを取得 ②カードのマークを外す ③対応するヒープをみて参照先取得 ④参照元に対応するカードのアドレスを 参照先リージョンのRsetに記録
21 © 2026 Fujitsu Limited [Step 2] Refinementのプロセス Javaヒープ a
foo x 参照 … … … … … … … … … カードテーブル ・・・ 0x1234 … ①DCQから処理対象のカードを取得 ②カードのマークを外す ③対応するヒープをみて参照先取得 ④参照元に対応するカードのアドレスを 参照先リージョンのRsetに記録
22 © 2026 Fujitsu Limited [Step 2] Refinementのプロセス Javaヒープ a
foo x 参照 … … … … … … … … … カードテーブル ・・・ 0x1234 … ①DCQから処理対象のカードを取得 ②カードのマークを外す ③対応するヒープをみて参照先取得 ④参照元に対応するカードのアドレスを 参照先リージョンのRsetに記録
23 © 2026 Fujitsu Limited [Step 2] Refinementのプロセス Javaヒープ a
foo x 参照 0x1234 … … … … … … … … カードテーブル ・・・ 0x1234 … ①DCQから処理対象のカードを取得 ②カードのマークを外す ③対応するヒープをみて参照先取得 ④参照元に対応するカードのアドレスを 参照先リージョンのRsetに記録
24 © 2026 Fujitsu Limited Remember Setの準備完了 Refinement前 Refinement後 Dirtyカードが処理され、
Remember Setを更新された
25 © 2026 Fujitsu Limited (再掲)Remember Setを使った参照先の更新 Javaヒープ a foo
Foo foo; foo.a = x; … … … … … … x x’ 参照 ①Remember Setを確認 ②xがfoo.aから参照されている情報を取得 ③GCによってxがx’に移動 ④foo.aの参照先をx’に更新 0x1234 … …
26 © 2026 Fujitsu Limited 大量のRefinementへの対応 Javaヒープ a foo x
参照 … … … … … … … … … カードテーブル ・・・ アプリケーションによっては大量のカードがDirtyに ⇒ Refinementに時間がかかってSTWが長時間化 Refinementをアプリと並行処理 = Concurrent Refinement
27 © 2026 Fujitsu Limited Concurrent Refinement Javaヒープ a foo
x 参照 … … … … … … … … … カードテーブル ・・・ アプリケーション Refinement GC発生までに一部のDirtyカードを処理 ⇒ STWが短縮
28 © 2026 Fujitsu Limited Concurrent Refinementの同期問題 Javaヒープ a foo
x 参照 … … … … … … … … … カードテーブル ・・・ アプリケーション Refinement 同時に同じカードに処理をしないように 同期を取らなければならない 同期コストによる スループット低下
29 © 2026 Fujitsu Limited ライトバリア(Write Barrier) Foo foo; <pre-write
barrier> foo.a = x; <post-write barrier> 参照更新のたびに追加されるコード post-write barrierの役割 •マークを付ける必要性の有無で フィルタリング •カードのメモリフェンス(同期) •カードにマークを付与 •DCQへの追加 x86-64において、約50命令
30 © 2026 Fujitsu Limited ライトバリアの命令数 GC種別 post-write barrierの 命令数
Parallel GC 7 G1 GC 約50 1回あたりの差は無視できるほど小さい 参照更新が非常に多く行われる場合は性能差につながる
アジェンダ G1 GCのスループット JEP 522のアプローチ解説 デモ&性能評価
32 © 2026 Fujitsu Limited JEP 522 概要 •タイトル G1
GC: Improve Throughput by Reducing Synchronization •サマリ •G1 GC使用時、アプリケーションスレッドとGCスレッド間の 同期処理数を削減し、アプリケーションのスループットを向上する •Goal(達成すること) •G1 GCの同期のオーバーヘッド削減 •G1 GCのライトバリアによって追加されるコード数の削減 •G1 GCのアーキテクチャは維持し、ユーザの操作に影響を与えない
33 © 2026 Fujitsu Limited JEP 522のアプローチ Javaヒープ a foo
x 参照 カードテーブル ・・・ Refinement テーブル ・・・ New
34 © 2026 Fujitsu Limited JEP 522のアプローチ Javaヒープ a foo
x 参照 カードテーブル ・・・ Refinement テーブル ・・・ New 次のGCでSTWの目標時間が満たせないほど Dirtyカードがたまってくると、
35 © 2026 Fujitsu Limited JEP 522のアプローチ Javaヒープ a foo
x 参照 カードテーブル ・・・ Refinement テーブル ・・・ New テーブルをスワップ
36 © 2026 Fujitsu Limited JEP 522によるスループット改善 Javaヒープ a foo
x 参照 カードテーブル ・・・ Refinement テーブル ・・・ New アプリケーション Refinement 同じカードを同時に処理しない →同期が不要に スループット低下の 原因が解消
37 © 2026 Fujitsu Limited ライトバリアの命令数削減 Foo foo; <pre-write barrier>
foo.a = x; <post-write barrier> 参照更新のたびに追加されるコード post-write barrierの役割 •マークを付ける必要性の有無で フィルタリング •カードのメモリフェンス(同期) •カードにマークを付与 •DCQへの追加 同期が不要になった分 処理を削減 x86-64において、約50→12命令
38 © 2026 Fujitsu Limited ライトバリアの命令数削減 GC種別 post-write barrierの 命令数
Parallel GC 7 G1 GC 約50→12 1回あたりの差は無視できるほど小さい 参照更新が非常に多く行われる場合は性能差につながる
アジェンダ G1 GCのスループット JEP 522のアプローチ解説 デモ&性能評価
40 © 2026 Fujitsu Limited デモ(省略)
41 © 2026 Fujitsu Limited Renaissance ベンチマーク 低いほど 高スループット JEP
522前 JEP 522後 ベンチマーク Renaissance Suite 100.9% 100.1% 100.6% 98.9% 100.6% 101.4% 99.7% 100.4% 100.3% 99.4% 100.8% 100.6% 97.5% 0.0% 20.0% 40.0% 60.0% 80.0% 100.0% 120.0% 100.0% 99.8% 98.7% 101.1% 97.7% 101.8% 97.8% 98.3% 98.9% 103.9% 97.7% 100.4% 0.0% 20.0% 40.0% 60.0% 80.0% 100.0% 120.0%
42 © 2026 Fujitsu Limited Renaissance ベンチマーク 低いほど 高スループット JEP
522前 JEP 522後 ベンチマーク Renaissance Suite 100.9% 100.1% 100.6% 98.9% 100.6% 101.4% 99.7% 100.4% 100.3% 99.4% 100.8% 100.6% 97.5% 0.0% 20.0% 40.0% 60.0% 80.0% 100.0% 120.0% 100.0% 99.8% 98.7% 101.1% 97.7% 101.8% 97.8% 98.3% 98.9% 103.9% 97.7% 100.4% 0.0% 20.0% 40.0% 60.0% 80.0% 100.0% 120.0% あらゆるアプリケーションで 顕著なスループット向上が 期待できるわけではない
サマリ G1 GCは常に進化を続けている 新しいJavaに移行することで スループット向上が期待できる まずはご自身でお試しで使ってみて JEP 522の効果を評価してみましょう
44 © 2026 Fujitsu Limited © 2026 Fujitsu Limited Thank
you