Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JEP 526: Lazy Constants
Search
Aya Ebata
March 24, 2026
Technology
75
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JEP 526: Lazy Constants
2026/03/24 JJUGナイトセミナー「Java 26 リリース記念イベント」
Aya Ebata
March 24, 2026
More Decks by Aya Ebata
See All by Aya Ebata
Flutterハンズオン 5
aya_ebata
0
110
JEP 480: Structured Concurrency
aya_ebata
0
300
Flutterハンズオン 4
aya_ebata
0
180
Flutterハンズオン 3
aya_ebata
0
110
Flutterハンズオン 2
aya_ebata
0
120
Flutterハンズオン 1
aya_ebata
0
150
あたらしい もじれつの かきかた
aya_ebata
0
150
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
810
社内勉強会vol.2@ごーふぁー荘
aya_ebata
1
820
Other Decks in Technology
See All in Technology
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
140
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
540
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
430
え、こんなに早く改修できるの?──新人エンジニアとスクラムマスターの2人が語る、AI×アジャイル開発の現場
ysasago
2
640
What the customer really needed
kawaguti
PRO
3
220
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
1
250
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.3k
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
270
beyond jj: config & tools ecosystem
indirect
0
5.8k
Making AI Agents Safe and Fast- Jev, Obsidian, and the Meta-Harness
x5gtrn
PRO
0
110
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
5
630
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
140
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
420
Optimizing for Happiness
mojombo
378
71k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Chasing Engaging Ingredients in Design
codingconduct
0
320
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
540
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
500
Balancing Empowerment & Direction
lara
6
1.3k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
The Curse of the Amulet
leimatthew05
3
15k
Accessibility Awareness
sabderemane
1
220
Embracing the Ebb and Flow
colly
88
5.2k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
Transcript
JEP 526: Lazy Constants (Second Preview) 2026/03/24 JJUGナイトセミナー Java 26リリース記念イベント
えばた あや @aya_122
自己紹介 - 名前: えばた あや - 𝕏: @aya_122 - 好き:
ラーメン二郎 / いくら / ポケモン / たまごっち - お仕事: フリーランス - Flutter / Python / Go / React
今日話すこと JEP 526: Lazy Constants (Second Preview) https://openjdk.org/jeps/526
Lazy Constantsとは - 遅延して初期化をするためのAPI - 初期化のタイミングが柔軟になる - 変更不可能な値として使用できる - finalとして宣言した場合と同じパフォーマンスが可能になる
- プレビュー版
目的 - アプリケーションの状態を必要な時に初期化可能にする - アプリケーションの起動時間が短縮する - パフォーマンスを下げずに、遅延定数の生成と初期化を切り離す - マルチスレッドでも最大1回の初期化を保証する
今までのfinal - logger は OrderController のインスタンス作成時に初期化される - 処理によっては初期化に時間がかかる可能性がある - 他の
Controller からも同時に初期化される class OrderController { private final Logger logger = Logger.create(OrderController.class); ... }
今までの書き方で遅延初期化 class OrderController { private Logger logger = null; Logger
getLogger() { if (logger == null) { logger = Logger.create(OrderController.class); } return logger; } ... }
今までの書き方で遅延初期化 欠点 - getLogger() を経由しないと NullPointerException が発生する - マルチスレッドの場合、複数回 Logger.create()
が実行される可能性が ある - logger が絶対に変化しないと言い切れないので、最適化されない
Lazy constantsの書き方 - java.lang.LazyConstant にあるファクトリメソッドの of を使用する - 一度初期化すると変更不可能になる class
OrderController { private final LazyConstant<Logger> logger = LazyConstant.of(() -> Logger.create(OrderController.class)); ... }
Lazy constantsの書き方 - logger.get() を呼び出した時に logger が初期化されていなかったら LazyConstant.of() で指定した内容で初期化する class
OrderController { ... void submitOrder(User user, List<Product> products) { logger.get().info("order started"); ... logger.get().info("order submitted"); } }
Lazy constantsの書き方 - アプリケーション全体を通して初期化方法を再考することが可能になる - 例) 各 Controller の初期化など class
Application { static final LazyConstant<OrderController> ORDERS = LazyConstant.of(OrderController::new); public static OrderController orders() { return ORDERS.get(); } }
コレクションのLazy constants - List.ofLazy() - 例) プールサイズ分だけリストを用意して、必要になった時に 遅延初期化をする - Map.ofLazy()
- 例) スレッド名に紐付くマップを用意して、必要になった時に 遅延初期化をする
まとめ - LazyConstant.of() と get() を使用して書いていく - 初期化を遅延できる - アプリケーションの起動時間が短縮できる