
JavaOne 2026 参加レポート
セッション編
こんにちは!
カサレアルでJavaのコースを担当している櫻庭です。
今回も前回に引き続き、JavaOneのレポートをお送りします。前回はキーノートを中心にレポートしました。今回はセッションについてレポートします。
前回のキーノート編はこちらから。
JavaOneではさまざまな分野のセッションがあります。Oracleのスピーカーも多いことから、サーバーサイドの技術よりもJava SE関連のセッションが多くありました。
サーバーサイドも、最近の傾向としてAIがらみのセッションが多かったようです。
櫻庭はJava SEに興味があるのでこの傾向はうれしいのですが、サーバーサイドに興味がある方には少しものたりなかったかもしれません。
なお、主なセッションの動画はYouTubeのJava Channelで公開予定です。
1日目
Java and AI – Paul Sandoz (Oracle)

前回、キーノートセッションの最後にSandoz氏からProject Babylonの紹介があったとお伝えしました。
キーノートセッションではProject Babylonの概要説明であったのに対し、本セッションではProject Babylonの詳細な解説を行っています。
機械学習や推論などを実装する場合、スケールやパフォーマンスを考えるとJavaは有力な候補となります。
しかし、AIにはGPUでの演算処理が欠かせません。今まで、JavaからGPUのCUDAなどを実行するには、JNI (Java Native Interface)やFFM API (Foreign Function & Memory)などを使用して、C/C++のコードを介して実行する必要がありました。
そこで、Javaのプログラムの一部をバイトコードではなく、他のプログラミングモデル、たとえばNVIDIAのCUDAに直接変換して実行できるようにしましょうというのがProject Babylonです。
今回のJavaOneではBabylonのセッションが複数ありました。このセッションはBabylonの全容を説明したセッションとなります。もし、Babylonに興味を持たれたのであれば、まず本セッションの動画を見てみるのがよいと思います(このブログ執筆時点ではまだ未公開ですが……)。
Paths to New Numeric Types On the Java Platform – Joe Darcy (Oracle)

スピーカーのDarcy氏は、Sun Microsystemsの時代からJavaの開発に携わっている超ベテランの開発者です。また、言語の互換性を維持するCompatibility & Specification Reviewのリードをされています。
Project Valhallaでは、Value Classという今までのクラスとプリミティブ型の中間になるような型の導入を検討しています。それに伴い、AIの演算処理で使用する半精度浮動小数点数(float16)や浮動小数点数の指数部を拡張したbfloat16などの新しい数値型を導入することが検討されています。
このセッションでは、これらの新しい数値型に関して、互換性を保持しつつ導入することの難しさなどを説明しています。
How Netflix Uses Java: 2026 Edition – Paul Bakker (Netflix)

Netflixでは多くのサービスをJavaで構築しています。このセッションでは、NetflixがどのようにJavaを使用しているかを紹介するものでした。
たとえば、Spring Bootで作成しているサービスではRESTを使わずにGraphQLを使用していることや、GCを世代別ZGCに変更したことなどが紹介されました。また、Spring Boot 3からSpring Boot 4へのアップグレードにはClaude Codeを使用しているようです。
Netflixのような大規模サービスであっても、貪欲に新機能を取り入れ、頻繁に構成などの見直しを行っていることは驚嘆でしかありません。
2日目
Just-In-Time Compilation for Java Performance: Recent and Ongoing Improvements – Roberto Castañeda Lozano (Oracle)

JVMは、起動直後、Javaのプログラムを逐次実行します。処理が進むにつれ、頻繁にアクセスされるなどパフォーマンス向上が図れる部分を動的に機械語に変換していきます。この実行時に機械語へ変換を行うのが、Just-In-Time (JIT)コンパイラーです。
このセッションでは、このJITコンパイラーの最近の変更点と、今後の予定について説明がありました。
たとえば、最近のCPUでは1つの命令で複数のデータに対して演算を行うベクトル命令が提供されています。IntelのCPUであればAVXデータセットがこれに相当します。
これに対し、JITコンパイラーは複数の同じ種類の演算が続けて行われている個所を見つけ出し、ベクトル命令を使用する機械語に変換します。
1つ1つは細かな変更であっても、まとめることで大きなパフォーマンス向上を図れるのです。
また、今後の予定としてはProject Valhallaで導入予定のValue Classへの対応があげられていました。
このような内容はなかなか公表されることがないので、JavaOneで聴講できるのは貴重ですね。
Training Java: Ahead of Time Updates from Project Leyden – Dan Heidinga (Oracle)

Javaの問題の1つに、長い起動時間があります。とくにコンテナー環境やサーバーレス環境でJavaを使用する場合、起動時間の短縮は喫緊の課題です。
また、ピークパフォーマンスに至るまでのウォームアップ時間の短縮も望まれています。
これらの課題に対応するのがProject Leydenです。
Project Leydenではトレーニング実行を行い、その解析結果をAOT (Ahead of Time)キャッシュに保存します。そして、次回起動時にはAOTキャッシュを使用することで、起動時間とウォームアップ時間の短縮を図っています。
AOTキャッシュにはロードしたクラス、最適化のために使用するプロファイル結果、初期化されたオブジェクトなどが保存されています。
また、現在取り組まれているのが、JITコンパイラーでコンパイルされたコードをキャッシュすることなどが説明されました。
Better Tools for Immutable Data – Dan Smith (Oracle)

現代のプログラミングではイミュータブル性は重要になっています。しかし、現行のJava言語仕様では明示的にイミュータブルを扱うことがなかなか難しいのです。
しかし、現行の言語仕様であっても、意識して記述することでイミュータブルなコードを作成できます。このセッションでは、イミュータブルなコードの書き方が紹介されました。
スピーカーのDan Smith氏は、Project Valhallaに従事している開発者です。そして、Project Valhallaで仕様策定しているValue Classもイミュータブルな型です。
取り上げられた主な題材を以下に示します。
- switch文ではなくswitch式
- Sealed Class
- Record Class
- パターンマッチング
また、今後導入されるイミュータブル関連の仕様として以下のような項目があります。
- withを使用したRecord Objectの生成
- Abstract Record
- Value Record
- Recordパターンの拡張
Record Classは、現状のJava言語仕様の中で唯一明示的にイミュータブルを扱えるクラスであるため、このセッションでも多くの時間を使って説明されていました。
3日目
Post-Mortem Crash Analysis with jcmd – Fairoz Matte (Oracle)

Post-Mortem Analysisは障害などが発生した後の解析のことを意味しています。元々は、医学用語の検死を意味しています。
実をいうと、櫻庭はセッション前までPost-MortemをPost-Modernだと勘違いしてました。ポストモダン解析とは次世代の解析方法なのかと思っていたところ、Post-Mortemだと気がついたのでした。ちょっと紛らわしいですね。
Javaのシステムがクラッシュしてダウンする時、hs_err_pidXXXX.logというファイルを出力します(XXXXはプロセス番号)。従来、このファイルを解析するには、gdbやjhsbなどが用いられてきました。しかし、それ相応の知識が必要で、簡単に行うわけにはいきませんでした。
そこで、起動中のJVMの解析を行うjcmdを、障害後のクラッシュ解析に使えるように拡張しましょうというのが本セッションの内容です。
本セッションでは、現在提案されているJEP 528 Post-Mortem Crash Analysis with jcmdに沿って説明が行われました。
通常、jcmdは起動中のJVMにアタッチして使用します。hs_err_pidXXXX.logを読み込んだ時も、起動中のJVMにアタッチした時と同様の操作で解析できるようです。
JavaOneいろいろ
Javaの年表

会場の一画にJavaの年表が貼りだしてありました。2025年に30周年を迎えたJavaですが、実際にはその前にOakという名前だった時代もありました。その時代も含めて35年の年表です。
横には付箋が用意してあり、参加者が思い思いに自分のJavaの思い出などを年表に貼り付けていました。最終日には、多くの付箋が貼られていました。それにしても、それを撮るのを忘れてしまったことに悔いが残ります。
コーヒー飲み放題

海外のカンファレンスでよく見かけるのがコーヒーサーバー(タンク?)。参加者はいつでも好きな時にコーヒーや紅茶を飲むことができます。
時差ボケで午後になるとどうしても眠気が襲ってくるので、コーヒーは必需品です。
そして、今年のコーヒーはStarbucksでした。
Dukeの交通標識


会場のOracle Conference Centerの近くにあるのが、Dukeの交通標識。これはJavaOneのためだけではなく、普通に設置してある標識です。
しかし、歩く人はほとんどいないので、あまり意味がないような気も……
ちなみに、Dukeの交通標識のちょっと先に、同じような青い交通標識があります。そこに30という文字が書いてあるのが見えたので、「これはJava 30周年の記念か」と思ったのですが、MySQLの30周年でした😆
蟹One

JavaOneがサンフランシスコで開催されていた頃から、日本人参加者で最終日に蟹を食べに行くというのが恒例になっています。
いつしか、それを蟹Oneと呼ぶようになりました。
蟹Oneの参加者は、多い時には50人近くにもなっていました。しかし、今年のJavaOneの日本人参加者は4人。しかも、1人が体調不良ということで、蟹One参加者は3人となってしまいました。
今までで、一番少ない人数での開催です。
ダンジネスクラブを1人まるごと1杯。なかなか食べ応えがありますよ。
まとめ
2回に渡ってJavaOne 2026のレポートをお送りしました。
JavaOneはJavaを実際に作っている人たちの話を聞ける貴重な機会です。やはり、一次情報に触れられるのは、その技術の背景なども説明されるため、理解しやすくなります。もちろん、英語なので、理解が追いつかないことも多々ありますが、それでもおもしろいです。
JavaOne 2026では、今まであまり語られることの少なかったJVM系のセッションが多くありました。もし、興味のあるセッションがありましたら、動画が公開された時にぜひチェックしてみてください。
そして、櫻庭は来年もJavaOneに参加するつもりなので、ぜひ一緒に参加しましょう!