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.3k
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.1k
Generational ZGCのメモリ運用改善 - その物理メモリ使用量、本当に正しい?
tabatad
1
830
失敗しないOpenJDKの非互換調査
tabatad
1
2.2k
Other Decks in Technology
See All in Technology
入門!AWS Blocks
ysuzuki
1
120
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
0
110
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
120
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
110
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
750
気づかぬうちにセキュリティ負債を生むAPIキー運用
sgwrmctk
0
120
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
170
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1k
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
160
フロンティアAIのゲート化と地政学リスク
nagatsu
0
140
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1k
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
3
210
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
The SEO identity crisis: Don't let AI make you average
varn
0
490
Six Lessons from altMBA
skipperchong
29
4.3k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
HDC tutorial
michielstock
2
710
New Earth Scene 8
popppiees
3
2.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
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