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 526: Lazy Constants
Search
Aya Ebata
March 24, 2026
Technology
68
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
100
JEP 480: Structured Concurrency
aya_ebata
0
300
Flutterハンズオン 4
aya_ebata
0
170
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
800
社内勉強会vol.2@ごーふぁー荘
aya_ebata
1
820
Other Decks in Technology
See All in Technology
AIエージェントを雇う前に決める5つのこと
knishioka
1
100
Does an AI Watermark Survive Translation?
machinetranslation
0
500
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
400
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
顧客の要望は2次情報である 〜アンテナを張るFDEの構造論〜
noriakioji
5
1.1k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.3k
「ミスを許さない手順書」を作ってみた 〜 個人的にはこれ以上できることはあまりなさそう/20260827-ssmjp-operation-procedure-update
opelab
16
17k
1000⼈規模のClaude Enterprise運⽤を「Oktaのグループ」と「Slack」に集約する
sansantech
PRO
1
530
Dylib Hijacking on macOS: Dead or Alive?
patrickwardle
0
170
分割40%キーボードにスムーズに入門するには
hoto17296
1
200
パスキーでドライブする アカウント統合(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
400
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
400
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Navigating Team Friction
lara
192
16k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
310
The browser strikes back
jonoalderson
0
1.6k
Site-Speed That Sticks
csswizardry
13
1.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
950
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
660
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
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() を使用して書いていく - 初期化を遅延できる - アプリケーションの起動時間が短縮できる