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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Daishi Tabata
May 30, 2026
Technology
1.9k
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.3k
Generational ZGCのメモリ運用改善 - その物理メモリ使用量、本当に正しい?
tabatad
1
890
失敗しないOpenJDKの非互換調査
tabatad
1
2.3k
Other Decks in Technology
See All in Technology
みてねにおけるAI-DLC導入活動とAIドリブン開発の現在地/JAWS-UG AI-DLC #2
isaoshimizu
2
320
OAuth SPIFFE Client Authentication(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
410
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
240
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
1
440
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
350
AI駆動開発を組織で促すために
lycorptech_jp
PRO
7
9.1k
APIセキュリティを組織で実現するには~注力する点と設計・実装に入れたい対策~
riiimparm
3
840
Self Healing Rollouts: Automating Production Fixes with Agentic AI
kdubois
0
120
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
6
3.6k
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
420
AIエージェントを雇う前に決める5つのこと
knishioka
1
120
Level Up Your CDK DX: 5 Tools I’ve Been Building
gotok365
2
160
Featured
See All Featured
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
510
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
220
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
810
The Cult of Friendly URLs
andyhume
79
7k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Product Roadmaps are Hard
iamctodd
55
12k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
570
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
430
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