Slide 1

Slide 1 text

1 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java言語仕様トピックス 2024-2025 2025.02.01 Burikaigi 2025 株式会社クレディセゾン テクノロジーセンター なぎせゆうき @nagise

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

3 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 提 供 提 供 カジュアル面談受付中!

Slide 4

Slide 4 text

4 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 今日の内容 • Javaの開発体制のはなし • Javaのリリース体制のはなし • Java22 (2024年3月) での新機能 • Java23 (2024年9月) での新機能 • Java24 (2025年3月) での新機能 (予定)

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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)

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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度に変更された

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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に相談しま しょう

Slide 11

Slide 11 text

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のリリースに 取り込まれるかたち

Slide 12

Slide 12 text

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相当) 絶版

Slide 13

Slide 13 text

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等ではちゃんと言語仕様を参照しているとこ ろは信用度が高い

Slide 14

Slide 14 text

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年はサポートすることを表明 • 他のディストリビューションも同レベルのサポートを表明

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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/

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

34 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 490:ZGC: 非世代モードを削除する JEP 474: ZGC: 世代別モードのデフォルト化 で ZGCが世代別GCとなったことに関連 非世代別モードが削除される JEP 490

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

41 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Thank you !