Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 言語仕様トピックス 2024-2025

nagise
February 02, 2025
220

Java 言語仕様トピックス 2024-2025

Javaの開発体制のはなし
Javaのリリース体制のはなし
Java22 (2024年3月) での新機能
Java23 (2024年9月) での新機能
Java24 (2025年3月) での新機能

nagise

February 02, 2025
Tweet

Transcript

  1. 1 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java言語仕様トピックス 2024-2025

    2025.02.01 Burikaigi 2025 株式会社クレディセゾン テクノロジーセンター なぎせゆうき @nagise
  2. 2 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 自己紹介 富山県出身

    富山市在住 株式会社 クレディセゾン 株式会社 凪瀬アーキテクツ 主なジャンル •Java言語仕様 ◦ https://docs.oracle.com/javase/specs/index.html •書籍 Effective Java の解説ポッドキャスト Tsundokanai Radio ◦ https://podcasters.spotify.com/pod/show/dokanai/ •Javaのジェネリクス •日本の旧暦のライブラリ(開発中) •Blog : プログラマーの脳みそ •Burikaigi (富山で1月末~2月頭で行われるカンファレンス) なぎせゆうき X (Twitter) @nagise
  3. 3 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 提 供

    提 供 カジュアル面談受付中!
  4. 4 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 今日の内容 •

    Javaの開発体制のはなし • Javaのリリース体制のはなし • Java22 (2024年3月) での新機能 • Java23 (2024年9月) での新機能 • Java24 (2025年3月) での新機能 (予定)
  5. 5 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Javaって誰が作っているの? Java11~21のIssueの対応をした企業

    https://inside.java/2023/09/19/the-arrival-of-java-21/ 1. Oracle 2. Red Hat 3. SAP 4. Independent 5. Google 6. Tencent 7. Amazon 8. ARM 9. Intel 10.IBM
  6. 6 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL OpenJDK と

    Javaのディストリビューション Oracle Red Hat SAP Google Amazon • Oracle JDK • Oracle OpenJDK • Red Hat build of OpenJDK • Azul Zulu • BellSoft Liberica JDK • SAP SapMachine • Amazon Corretto • Microsoft Build of OpenJDK • Eclipse Temurin (Adoptium) ※ 旧 AdoptOpenJDK などなど https://openjdk.org/ e.t.c. 有償サポートのものも 無償のものもある GPLリンク例外つきの GNU General Public License (GNU GPL)
  7. 7 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java とJava

    じゃないOpenJDK派生物 Java を名乗るためにはOracleのライセンスをうけて Java Technology Compatibility Kit (TCK) という互換テストをパスする必要がある。 各社がリリースしているJavaはおおむねこれ • Oracle JDK • Amazon Corretto • Microsoft Build of OpenJDK e.t.c. Java ではないOpenJDKの派生物 Java言語だけどもJava ではないような存在 • Android
  8. 8 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Javaの歴史トピック •

    1995年 米Sun MicrosystemsがJavaを発表 • Sun は Java をライセンスして各社からJava VM が提供された • 初期のころは Microsoft も参画。JITコンパイラなどの貢献 • 1998年 JCP 1.0 • Java Community Process というJavaの仕様策定のプロセスの制定 • 2005年 Javaをオープン化しようとする動き • Apache Harmony (Apacheライセンス) • 2006年 SunがOpenJDKを開始 • Sun は Apache ライセンスをよしとしなかった • OpenJDK は GNU General Public License (GNU GPL) ライセンス • 2009年 Sun が 米Oracle に買収される • Javaの基本方針は継続 • 2017年 Java9 リリース(非LTS) このバージョンから半年ごとの定期リリースとなる • 2018年9月 Java11 リリース(LTS) 定期リリースになってからの最初のLTS版 • 3年に1度のLTS(Long Term Support : ⾧期サポート) • Oracle は最低8年のサポートを表明 • 2021年9月 Java17 リリース(LTS) • 2023年9月 Java21 リリース(LTS) LTSのリリース間隔は2年1度に変更された
  9. 9 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java Community

    Process Javaの仕様策定についての規定 https://www.jcp.org/en/procedures/overview
  10. 10 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java Community

    Process 参加メンバーによって運営 JCPメンバーと執行委員(EC : Executive Committee) JJUGは2023年にECになった https://www.publickey1.jp/blog/23/javajava.html Javaの仕様策定に関わりたければJJUGに相談しま しょう
  11. 11 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JSR と

    JEP Javaの仕様の改訂はJSR(Java Specification Request) と呼ば れていて、番号付きで管理されている。 また個別の言語機能の拡張提案は JEP(JDK Enhancement- Proposal) と呼ばれ、これも番号付きで管理されている。 参考) https://yyyank.blogspot.com/2015/04/javajsr.html JEPのリスト https://openjdk.org/jeps/0 Javaのバージョンアップで追加される新機能についてはこの JEPのうち準備ができたものが半年ごとのJavaのリリースに 取り込まれるかたち
  12. 12 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java言語仕様 OracleのサイトでJava言語仕様が公開されている

    言語仕様の“The Java Language Specification” VM仕様の”The Java Virtual Machine Specification” https://docs.oracle.com/javase/specs/index.html 昔は書籍で出版されたりもしていた。 日本語訳も第3版まで出ていた(Java6相当) 絶版
  13. 13 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL The Java®

    Language Specification 現在の最新LTS版のJava SE 21 Edition https://docs.oracle.com/javase/specs/jls/se21 /html/index.html Non-LTSも各バージョンが提供されている Java関連技術書の記述の究極の出典 参考文献にコレを挙げていないところは信用しな い方がいい blog等ではちゃんと言語仕様を参照しているとこ ろは信用度が高い
  14. 14 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Javaのリリース:ここ1年の動き Java

    21 Java 22 Java 23 Java 24 Java25 2023/09 2024/03 2024/09 2025/03 2025/09 Non - LTS • 半年ごとの定期リリース • 2年ごとのTLS(⾧期サポート版)のリリース • OracleはLTSは最低8年はサポートすることを表明 • 他のディストリビューションも同レベルのサポートを表明
  15. 15 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL LTS は

    2年に1回 今年は裏年 裏年と言えばタケノコ 富山県立大学のある富山県射 水市黒河はタケノコの産地 季節はGWごろ
  16. 16 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java22 (2024-03)

    リリース • JEP 423: G1領域の固定 • JEP 454: Foreign Function & Memory API • JEP 456: 無名変数とパターン • JEP 458: マルチファイル・ソース・コード・プログラムの起動 プレビュー • JEP 447:super(...)の前の文(プレビュー) • JEP 457: Class-File API (プレビュー) • JEP 459: 文字列テンプレート(第2プレビュー) • JEP 460: Vector API(第7インキュベーター) • JEP 461: Stream Gatherers (プレビュー) • JEP 462: 構造化された並行性 (第2プレビュー) • JEP 463: 暗黙的に宣言されたクラスとインスタンスのメイン・メソッド(第2プレビュー) • JEP 464: スコープ値(第2プレビュー) JDK 22
  17. 17 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 423:

    G1領域の固定 GC(ガーベッジコレクション)のパフォーマンス アップ。 Java Native Interface (JNI)まわりでGCの パフォーマンスが向上する • JNI critical regions でスレッドが遅延しない 要するにJNIには制約があって面倒くさい 「クリティカル領域内では、ネイティブ コードは他 の JNI 関数や、現在のスレッドをブロックして別の Java スレッドを待機させる可能性のあるシステム コールを呼び出してはなりません」 https://docs.oracle.com/en/java/javase/21/docs/specs/jni/index.html JEP 423
  18. 18 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 454:

    Foreign Function & Memory API Project Panama関連。 https://openjdk.org/projects/panama/ JVM外とのやり取りをする機能。JNIの代替を目指したもの。 java.lang.foreign パッケージで関連機能が提供されている。 JavaVMの外側のメモリを扱うことができる。 sun.misc.Unsafeの代替として期待。 使い方は以下のblogなどを参考に https://blog1.mammb.com/entry/2023/11/04/090000 JEP 454
  19. 19 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 456:

    無名変数とパターン 使用しない変数を “_” で宣言する機能。 Scalaなどにある機能をJavaに輸入したもの。 仕込みとしてJava9 以降では “_” 1文字の変数名はコンパイルエ ラーとされていた。 使用できる箇所 • ブロック内のローカル変数宣言文(JLS §14.4.2) • Try-with-resources文のリソース指定(JLS §14.20.3) • For文(JLS §14.14.1)、 • 拡張for文(JLS §14.14.2) • catchブロックの例外パラメータ(JLS §14.20) • ラムダ式のパラメータ (JLS §15.27.1) JEP 456
  20. 20 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 456:

    無名変数とパターン カウントをする例 static int count(Iterable<Order> orders) { int total = 0; for (Order _ : orders) // Unnamed variable total++; return total; } この “_” を変数として参照することはできない また、複数の “_” を使うこともできる
  21. 21 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 458:

    マルチファイル・ソース・コード・プログラムの起動 Java11 から単一のjavaファイルはコンパイルせ ずに直接 java コマンドで実行することが出来る ようになっていた(JEP330) JEP 458 では複数ファイルに対応 JEP 458
  22. 22 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java23 (2024-09)

    リリース • JEP 467: Markdownドキュメント・コメント • JEP 471: sun.misc.unsafeのメモリアクセス・メソッドを 削除を予定した非推奨に設定 • JEP 474: ZGC: 世代別モードのデフォルト化 プレビュー • JEP 455: プリミティブ型のパターン、instanceof、switch(プレビュー) • JEP 466: Class-File API (第2プレビュー) • JEP 469: Vector API(第8インキュベーター) • JEP 473: Stream Gatherers (第2プレビュー) • JEP 476: モジュール・インポート宣言(プレビュー) • JEP 477: 暗黙的に宣言されたクラスとインスタンスのメイン・メソッド(第3プレビュー) • JEP 480: 構造化された並行性 (第3プレビュー) • JEP 481: スコープ値(第3プレビュー) • JEP 482: 柔軟なコンストラクタ本体(第2プレビュー) JDK 23
  23. 23 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 467:

    Markdownドキュメント・コメント Javadoc コメントをMarkdownで記述することが出来ます 通常のjavadocコメントが /** ~ */ なのに対し、Markdownの時は /// CommonMarkバリアントを採用 パーサーの実装はcommonmark-java 既存のjavadocタグ @param などは 引き続き利用することが出来る JEP 467
  24. 24 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 471:

    sun.misc.unsafeのメモリアクセス・メソッドを 削除を予定した非推奨に設定 JEP 471 Unsafeクラスのヒープではないネイティブメモリまわり のAPIをDeprecated for Removalにする 代替となるJEP 454 FFMがJava22で導入されたので 古い時代のUnsafe をいよいよ削る方向で とはいえ、実際に削除されるのはかなり先では?
  25. 25 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 474:

    ZGC: 世代別モードのデフォルト化 ZGCのデフォルトを世代別ZGCに変更 ZGCはもともと世代別GCではなかったが、Java21で 世代別GCをサポートするようになった Java23 ではZGCは世代別がデフォルトに JEP 474 https://logico-jp.dev/2023/12/15/jdk-21-the-gcs-keep-getting-better/
  26. 26 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java24 (2025-03)

    リリース • JEP 472:JNIの使用を制限する準備 • JEP 475:G1の後半のバリア拡大 • JEP 479:Windows 32ビットx86ポートを削除する • JEP 483:事前のクラス読み込みとリンク • JEP 484:クラスファイル API • JEP 485:ストリーム収集者 • JEP 486:セキュリティ マネージャーを永久に無効にする • JEP 490:ZGC: 非世代モードを削除する • JEP 491:ピン留めせずに仮想スレッドを同期する • JEP 493:JMOD なしでランタイムイメージをリンクする • JEP 496:量子耐性モジュール格子ベースの鍵カプセル化メカニズム • JEP 497:量子耐性モジュール格子ベースのデジタル署名アルゴリズム • JEP 498:sun.misc.Unsafe でのメモリ アクセス メソッドの使用について警告する • JEP 501:32 ビット x86 ポートの削除を非推奨にする プレビュー機能は略 JDK 24
  27. 27 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 472:JNIの使用を制限する準備

    Java Native Interface (JNI)の使用に関する警告を発行し、 Foreign Function & Memory (FFM) API を調整して、一 貫した方法で警告を発行します このような警告はすべて、JNI と FFM API を一様に制限 することでデフォルトで整合性を保証する将来のリリー スに開発者を準備することを目的としています ※JEP読んだけど良くわかりませんでした! JEP 472
  28. 28 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 475:G1の後半のバリア拡大

    JEP 475 アプリケーション メモリ アクセスに関する情報を記 録する G1 ガベージ コレクターのバリアの実装を簡素 化するために、その拡張を C2 JIT のコンパイル パイ プラインの早い段階から後の段階に移します。 ※C2 - 統計情報をもとにJITコンパイルするやつ
  29. 29 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 479:Windows

    32ビットx86ポートを削除する Windows 32 ビット x86 ポートのソース コードとビルド サポートを削除 2000年代後半にはもう64bit CPUが主流になっており、 Windows 11 はもう 32bit はサポートしていない 32bit版もうええやろ的な JEP 479
  30. 30 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 483:事前のクラス読み込みとリンク

    HotSpot Java 仮想マシンの起動時に、アプリケーショ ンのクラスがロードされリンクされた状態で即座に使 用できるようにすることで、起動時間を短縮 最初の実行中にアプリケーションを監視し、ロードさ れリンクされたすべてのクラスのフォームをキャッ シュに保存して、その後の実行で使用 起動時間とウォームアップ時間の両方を将来的に改善 するための基礎を築く JEP 483
  31. 31 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 484:クラスファイル

    API Java クラス ファイルを解析、生成、変換するための標準 API を提供 目標 • JDK コンポーネントを標準 API に移行できるようにし、 最終的にはサードパーティの ASM ライブラリの JDK の内部コピーを削除する 非目標 • クラス ファイルを処理する既存のライブラリを廃止す ることが目標ではなく、世界最速のクラス ファイル ライブラリになることも目標ではありません JEP 484
  32. 32 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 485:ストリーム収集者

    Stream API の中間処理に Gatherer というものを追加する 既存の組み込み中間操作では簡単に実現できない方法で データを変換できるようになる 目標 • ストリーム パイプラインの柔軟性と表現力を高めます • 可能な限り、カスタム中間操作で無限サイズのストリー ムを操作できるようにします JEP 485
  33. 33 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 486:セキュリティ

    マネージャーを永久に無効にする • 起動時にセキュリティマネージャを有効にする機能を削除 • 実行時にカスタムセキュリティマネージャをインストールする 機能を削除 • 将来のリリースで API を削除する前に、Security Manager API を機能しないようにする 背景として、Java Applet が Java 11で廃止され、現代ではセキュ リティマネージャーがほぼ使われなくなっている JEP 486
  34. 34 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 490:ZGC:

    非世代モードを削除する JEP 474: ZGC: 世代別モードのデフォルト化 で ZGCが世代別GCとなったことに関連 非世代別モードが削除される JEP 490
  35. 35 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 491:ピン留めせずに仮想スレッドを同期する

    Java 21で導入された仮想スレッド (JEP 444)を 旧来のsynchronizedメソッドでも利用できるようにJVMの実装 を変更します Javaのスレッドの実装についての歴史は以下の記事を参考にし てください 「Virtual Thread導入の背景 - Javaのマルチスレッドの歴史を振 り返る」 https://www.javainthebox.com/2022/12/virtual-thread- java.html JEP 491
  36. 36 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 493:JMOD

    なしでランタイムイメージをリンクする Jmod ツールは Java9 で追加されたモジュール機能の関連ツール で、モジュール単位でクラスファイルとネイティブコードなどを ZipアーカイブしたJMODファイルを作ることが出来る Jlink ツールはモジュール機能でJDKのうち必要モジュールだけ を抽出してカスタムJREを作ることが出来る JDK の JMOD ファイルなしでjlinkを使えるようにし、デフォル ト構成でビルドされた JDK よりも約 25% 小さくなります JEP 493
  37. 37 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 496:量子耐性モジュール格子ベースの鍵カプセル化メカニズム

    KeyPairGenerator による ML-DSA 実装 FIPS 203 で標準化された • ML-KEM-512 • ML-KEM-768 • ML-KEM-1024 をサポートします JEP 496
  38. 38 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 497:量子耐性モジュール格子ベースのデジタル署名アルゴリズム

    量子耐性のあるモジュール格子ベースのデジタル署名 アルゴリズム (ML-DSA) の実装を提供 FIPS 203 で標準化された • ML-DSA-44 • ML-DSA-65 • ML-DSA-87 をサポートします JEP 497
  39. 39 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 498:sun.misc.Unsafe

    でのメモリ アクセス メソッドの使用に ついて警告する sun.misc.Unsafeでメモリ アクセス メソッドが初めて呼び出され たときに、実行時に警告を発します これらのサポートされていないメソッドはJava 23 で非推奨にな りました VarHandle API ( JEP 193、JDK 9) と Foreign Function & Memory API ( JEP 454sun.misc.Unsafe 、JDK 22) に置き換えら れました JEP 498
  40. 40 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 501:32

    ビット x86 ポートの削除を非推奨にする 32 ビット x86 ポートを非推奨とし、将来のリリースで削除する 予定です。これにより、JDK に残っている唯一の 32 ビット x86 ポートである Linux 32 ビット x86 ポートが非推奨となりま す JEP 501