🌎

JavaOne 2025 参加レポート

2025/04/02に公開

はじめまして、三菱UFJインフォメーションテクノロジーの細田です。
今回は先週開催されたJavaOne 2025に参加してきましたので、レポートしたいと思います。

JavaOneと滞在場所について

Java誕生の翌年から毎年開催されており、Javaをメインとしたカンファレンスでは世界最大級のものです。
元々はサン・マイクロシステムズが主催しており、現在は同社を吸収合併したオラクルが主催しています。
今回は最新のJavaバージョン24に加えAIに絡めたセッションが多かったように思いますが、個人的に期待していた生成AI関連の深い情報は残念ながら聞けませんでした。(機械学習の方面が多かった)
全体の延べ参加者数は不明ですが、初日のOpening Keynoteには400名ほど参加されていました。

  • 開催地
     アメリカ カリフォルニア州レッドウッドショアのOracle Parkwayで開催されました。元はOracle本社だったようで、会場のOracleカンファレンスセンターなど、Oracleの建物が数多くありました。

JavaOneの旗も立っています。

  • 開催期間
     2025/3/18(火) ~ 2025/3/20(木)の3日間

  • MUITからの参加者
     今回は私含めて2名での参加でした。どちらも海外慣れしておらず、私に至ってはほぼ初海外という状況でしたので、出発前は少し不安もありましたが、特に困ることはなく快適に過ごせました。

  • 気候や治安、食べ物
     気候は同時期の日本とほぼ同じで、滞在中大きく崩れることなく安定していました。
     治安については場所によりますが、日中人通りがある道路を歩く分には問題なさそうでした。念のため立ち寄る場所の治安はネットであらかじめ調べるようにしていました。
     食べ物の味は基本見た目からイメージしたものと大きく異なることはありませんでしたが、イメージがつかないものはギャンブルかもしれません。(同行者が買ったビールがとても不味かったらしい)

JavaOne 2025の内容

Opening Keynoteでは、どういった考えのもとJavaがバージョンアップを重ねてきたか、NetflixやUber、Dockerといった企業でのJava活用事例、当日に正式リリースされたJDK24の概説が述べられていました。私は社内向けにフレームワークを開発しているため、特に前半は今後の開発時に意識すべき内容として参考になると思いました。
以下に個別セッションの内容も含めてレポートします。
  
まずJavaのVUPポリシーについて、開発者の生産性とパフォーマンスという2大目標への注力が挙げられていました。言語としてのシンプルさと互換性の重要性、特に新機能が既存知識を損なわずに拡張的なものであることが、開発者の学習投資を無駄にしないために重要とのことです。また、開発現場の痛点(Pain Point)に注目し、それを解決するための新機能の提案が重要なプロセスとして述べられていました。具体的なところとしてはGCの改善や起動時間とウォームアップの短縮が挙げられ、Netflixのプレゼンターからは、G1 GCからGenerational ZGCへ切り替えることでPause timesやError ratesが大幅に改善されたデータが示されました。
  
また、これからのJavaの展望として、抽象的ではあるものの以下のようなことが述べられていました。

  • 単一システム時代の利便性を、複雑な分散環境においても再現すること
  • セキュリティ・安定性・後方互換性を維持しながら、革新的機能を市場に投入する体制を確立すること
  • VMware、Kubernetes、Dockerといった技術との連携により、従来の物理的な制約を超えた柔軟なシステム運用と、膨大なデバイス管理へ対応すること
    Dockerからは今後数ヶ月~1年で開発者の生産性向上に寄与する新機能が数多くリリースされるとアナウンスがありました。LLMの利用方法の変革という話もあったので、Java開発者以外にも関わってくる内容のようです。
  • 大小様々な規模での採用実績が示す、Javaの技術基盤としての信頼性と持続性を維持すること

続いて、最近のJavaの取り組み・変更点については、以下のような内容が述べられていました。

  • JDK19で導入された仮想スレッドのピニング問題への対応
     仮想スレッドはJVM管理の軽量スレッドとして実装されましたが、synchronized内で使うケース等で問題がありました。
    仮想スレッドはOS管理のスレッド上にマウント・アンマウントを繰り返すのですが、synchronized内でアンマウントができずにOS管理のスレッドをロックするという問題です。(仮想の意味なし)
    JDK24ではsynchronizedの実装を修正することで、この問題が解消されました。
    ピニング問題についての詳細は下記JEPやQuarkusのサイトに簡潔にまとまっています。
    (今回解決したsynchronized以外にも問題が残っているとのこと)

https://openjdk.org/jeps/491
https://ja.quarkus.io/guides/virtual-threads

  • 新機能リリースを促進するため、JDK内部へのアクセスを段階的に制限し、内部リファクタリングを容易にする
     JDK8から17への移行で出くわしたのが懐かしいです。Javaの進化のためには必要ということですね。

  • コードリフレクションを用いてJavaコードをシンボリックに扱い、GPUや機械学習モデルなどの外部モデルへマッピングする仕組みの解説
    コードリフレクションについては登壇者ご本人の下記動画をご参照。

https://inside.java/2023/08/28/code-reflection/

  • JavaコードをONNXモデル(機械学習モデルを表現するためのフォーマット定義)に変換し、そのモデルを実行するデモ
     手書きの数字を認識する機械学習のデモでした。(9がうまく認識されず会場が沸いていました)

  • 量子コンピューティングの発展により公開鍵ベースのセキュリティが侵害されることに備え、モジュールラティスベースのメカニズム・アルゴリズムを提供
    JDK24で以下のJEPが追加されています。

https://openjdk.org/jeps/496

https://openjdk.org/jeps/497

最後に、Java初学者向けにLearn.javaというサイトが宣伝されていました。
新人やJava未経験者におすすめしてみるのも良いかもしれません。
https://learn.java/

最後に

今回は初のJavaOne参加でしたが、登壇者の方々だけでなく、
現地の参加者や日本から参加されているJJUGの皆様ともお話しすることができ良かったです。
次はLTSのJDK25が出た後の開催となりますので、さらに盛り上がりを見せると思います。
本記事が来年以降JavaOneに参加される方の参考になれば幸いです。

Discussion