Share
Embed
Java 言語仕様トピックス 2024-2025
Javaの開発体制のはなし
Javaのリリース体制のはなし
Java22 (2024年3月) での新機能
Java23 (2024年9月) での新機能
Java24 (2025年3月) での新機能
nagise
February 02, 2025
Transcript
41 slides
-
1 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java言語仕様トピックス 2024-2025
2025.02.01 Burikaigi 2025 株式会社クレディセゾン テクノロジーセンター なぎせゆうき @nagise -
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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 提 供
提 供 カジュアル面談受付中! -
4 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL 今日の内容 •
Javaの開発体制のはなし • Javaのリリース体制のはなし • Java22 (2024年3月) での新機能 • Java23 (2024年9月) での新機能 • Java24 (2025年3月) での新機能 (予定) -
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 © 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 © 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 © 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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL Java Community
Process Javaの仕様策定についての規定 https://www.jcp.org/en/procedures/overview -
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 © 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 © 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 © 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 © 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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL LTS は
2年に1回 今年は裏年 裏年と言えばタケノコ 富山県立大学のある富山県射 水市黒河はタケノコの産地 季節はGWごろ -
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 © 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 © 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 © 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 © 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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 458:
マルチファイル・ソース・コード・プログラムの起動 Java11 から単一のjavaファイルはコンパイルせ ずに直接 java コマンドで実行することが出来る ようになっていた(JEP330) JEP 458 では複数ファイルに対応 JEP 458 -
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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 467:
Markdownドキュメント・コメント Javadoc コメントをMarkdownで記述することが出来ます 通常のjavadocコメントが /** ~ */ なのに対し、Markdownの時は /// CommonMarkバリアントを採用 パーサーの実装はcommonmark-java 既存のjavadocタグ @param などは 引き続き利用することが出来る JEP 467 -
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 © 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 © 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 © 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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 475:G1の後半のバリア拡大
JEP 475 アプリケーション メモリ アクセスに関する情報を記 録する G1 ガベージ コレクターのバリアの実装を簡素 化するために、その拡張を C2 JIT のコンパイル パイ プラインの早い段階から後の段階に移します。 ※C2 - 統計情報をもとにJITコンパイルするやつ -
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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 483:事前のクラス読み込みとリンク
HotSpot Java 仮想マシンの起動時に、アプリケーショ ンのクラスがロードされリンクされた状態で即座に使 用できるようにすることで、起動時間を短縮 最初の実行中にアプリケーションを監視し、ロードさ れリンクされたすべてのクラスのフォームをキャッ シュに保存して、その後の実行で使用 起動時間とウォームアップ時間の両方を将来的に改善 するための基礎を築く JEP 483 -
31 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 484:クラスファイル
API Java クラス ファイルを解析、生成、変換するための標準 API を提供 目標 • JDK コンポーネントを標準 API に移行できるようにし、 最終的にはサードパーティの ASM ライブラリの JDK の内部コピーを削除する 非目標 • クラス ファイルを処理する既存のライブラリを廃止す ることが目標ではなく、世界最速のクラス ファイル ライブラリになることも目標ではありません JEP 484 -
32 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 485:ストリーム収集者
Stream API の中間処理に Gatherer というものを追加する 既存の組み込み中間操作では簡単に実現できない方法で データを変換できるようになる 目標 • ストリーム パイプラインの柔軟性と表現力を高めます • 可能な限り、カスタム中間操作で無限サイズのストリー ムを操作できるようにします JEP 485 -
33 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 486:セキュリティ
マネージャーを永久に無効にする • 起動時にセキュリティマネージャを有効にする機能を削除 • 実行時にカスタムセキュリティマネージャをインストールする 機能を削除 • 将来のリリースで API を削除する前に、Security Manager API を機能しないようにする 背景として、Java Applet が Java 11で廃止され、現代ではセキュ リティマネージャーがほぼ使われなくなっている JEP 486 -
34 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 490:ZGC:
非世代モードを削除する JEP 474: ZGC: 世代別モードのデフォルト化 で ZGCが世代別GCとなったことに関連 非世代別モードが削除される JEP 490 -
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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 493:JMOD
なしでランタイムイメージをリンクする Jmod ツールは Java9 で追加されたモジュール機能の関連ツール で、モジュール単位でクラスファイルとネイティブコードなどを ZipアーカイブしたJMODファイルを作ることが出来る Jlink ツールはモジュール機能でJDKのうち必要モジュールだけ を抽出してカスタムJREを作ることが出来る JDK の JMOD ファイルなしでjlinkを使えるようにし、デフォル ト構成でビルドされた JDK よりも約 25% 小さくなります JEP 493 -
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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 497:量子耐性モジュール格子ベースのデジタル署名アルゴリズム
量子耐性のあるモジュール格子ベースのデジタル署名 アルゴリズム (ML-DSA) の実装を提供 FIPS 203 で標準化された • ML-DSA-44 • ML-DSA-65 • ML-DSA-87 をサポートします JEP 497 -
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 © 2024 CREDIT SAISON CO., LTD. CONFIDENTIAL JEP 501:32
ビット x86 ポートの削除を非推奨にする 32 ビット x86 ポートを非推奨とし、将来のリリースで削除する 予定です。これにより、JDK に残っている唯一の 32 ビット x86 ポートである Linux 32 ビット x86 ポートが非推奨となりま す JEP 501