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
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.3k
AIはどのように 組織のアジリティを変えるのか?
junki
3
790
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
460
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
590
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
130
AIエージェントが名古屋の猛暑からあなたを守る
happysamurai294
0
120
やさしいA2A入門
minorun365
PRO
12
1.9k
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
2
340
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
1k
フロンティアAIのゲート化と地政学リスク
nagatsu
0
140
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
180
自律型AIエージェントは何を破壊するのか
kojira
0
160
Featured
See All Featured
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
230
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Agile that works and the tools we love
rasmusluckow
331
21k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
160
The untapped power of vector embeddings
frankvandijk
2
1.8k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
430
The Cost Of JavaScript in 2023
addyosmani
55
10k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
840
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