The Arrival of Java 19!

原文はこちら。
The original article was written by Sharat Chander (Director, Java SE Product Management, Oracle).
https://inside.java/2022/09/20/the-arrival-of-java-19/

TwitterでJavaOpenJDKをフォローしてください。

Oracleは、JDK 19の一般提供を開始したことをお知らせします。このリリースは、6ヶ月のリリース・サイクルを通じて予定通り提供される10番目のFeature Release(機能リリース)です。このレベルの予測可能性により、期待される変更の安定した流れのおかげで、開発者はイノベーションの採用を容易にコントロールできます。

Chart showing number of features per release since Java 8

Javaは、パフォーマンス、安定性、セキュリティを高めることができるため、世界で最も人気のあるプログラミング言語となり続けています。IDCのレポートによると、全世界のフルタイム開発者の75%に相当する1000万人以上の開発者がJavaを使用しているとのことです。

JDK 19 is now available!

Oracleは開発者、エンドユーザー、および企業向けにJDK 19を提供するようになりました。

Oracle Releases Java 19
https://www.oracle.com/news/announcement/oracle-releases-java-19-2022-09-20/

Oracle JDK 19は、Oracle Java SE Support Roadmapに記載されているOracle Critical Patch Update(CPU)スケジュールに従って、パフォーマンス、安定性、およびセキュリティのアップデートがなされる予定です。

Critical Patch Updates, Security Alerts and Bulletins
https://www.oracle.com/security-alerts/
Oracle Java SE Support Roadmap
https://www.oracle.com/java/technologies/java-se-support-roadmap.html

Oracle JDK 19は、長期サポート(LTS)リリースではありません。Oracle JDK 17(2021年9月14日発表)は、2018年に発表されたリリース・サイクルにおける最新の長期サポート(LTS)です。

Oracle Releases Java 17
https://www.oracle.com/news/announcement/oracle-releases-java-17-2021-09-14/

Oracleは、今後のLTSリリースの間隔を3年から2年に短縮する計画を発表しています。そのため、次のLTSは2023年9月のJava 21と予想しておいてください。

Moving the JDK to a Two Year LTS Cadence
https://blogs.oracle.com/java/post/moving-the-jdk-to-a-two-year-lts-cadence
https://logico-jp.io/2021/09/15/moving-the-jdk-to-a-two-year-lts-cadence/

Oracle JDK 17で発表されたもう1つの重要な変更点は、よりシンプルな新しいライセンス条項の導入です。これにより、企業は少なくとも今後3年間、次のLTSリリースと丸1年重なる状態で、四半期ごとのパフォーマンス、安定性、セキュリティパッチを含むOracle JDK 17を無償で使用できます。Java SE Subscriptionの加入者は、Oracle Java SEサポートと、GraalVM Enterprise、Java Management Service、Advanced Management Consoleなどの商用機能を利用できます。新しいライセンスの詳細については,New Java SE License Terms ブログを参照してください。

Introducing the Free Java License
https://blogs.oracle.com/java/post/free-java-license
https://logico-jp.io/2021/09/15/introducing-the-free-java-license/

Java 19, Together

以前のリリースと同様、Java 19では、引き続きOpenJDKコミュニティの多くの個人や組織からの貢献を褒め称えています。私たちはみんなで一緒にJavaを作っているのです。

JDK 19 Fix Ratio

JDKのリリースでの経時的変化の割合は何年もほぼ一定でしたが、6ヶ月サイクルの下、プロダクションレディな機能や改良が提供されるペースが大幅に改善されました。

かつてのメジャーリリースのように、数年ごとに何万もの修正や100近いJEP(JDK Enhancement Proposals)を提供するのではなく、機能強化は、より管理しやすく、予測可能な6ヶ月のスケジュールで、より無駄のない機能リリースとして提供されます。変更内容は、重要な新機能から小さな機能強化、日常的なメンテナンス、バグ修正、ドキュメントの改善まで多岐にわたります。各変更は、JDKバグシステム内の1つの課題に対する1つのコミットで表現されます。

かつてのメジャーリリースのように、数年ごとに何万もの修正や100近いJEP(JDK Enhancement Proposals)を提供するのではなく、より管理しやすく、予測可能な6ヶ月のスケジュールで、より簡潔な機能リリースとして機能強化を提供します。変更内容は、重要な新機能から小さな機能強化、日常的なメンテナンス、バグ修正、ドキュメントの改善まで多岐にわたります。各変更は、JDKバグシステム内の1つの課題に対する1つのコミットで表現されます。

JDK Bug System
https://bugs.openjdk.org/secure/Dashboard.jspa

Java 11からJava 19でGA時に修正済みとされた19,297件のJIRAのIssueのうち、13,825件はOracleに勤務する人々が完了し、5,472件は個人開発者と他の組織に勤務する開発者による貢献でした。Issueを調べ、担当者の組織データを照合した結果、Javaのコントリビューション開発のスポンサーとなった組織は下図のようになりました。Javaにおけるコントリビューションの開発スポンサーは、以下のような組織です。

Graph showing the number of fixes per organization

Java 19 では、修正済みとマークされた 1962 件の JIRAのIssueのうち、1383件がOracleで勤務する者が完了し、579件はJavaコミュニティの他のメンバーが貢献してくれました。

Oracleは、Alibaba、Amazon、ARM、Huawei、IBM、Intel、JetBrains、NTT Data、Red Hat、Tencentなどの組織で働く開発者が注目すべき貢献をしてくれたことに感謝しています。また、Bellsoft、DataDog、Loongson、Skymatic などの小規模な組織や、独立系の開発者が、Java 19 の修正の 6% に貢献してくれたことにも感謝しています。

Graph showing the number of fixes per organization

私たちは、提案された変更点をレビューしてくれた多くの経験豊富な開発者、早期アクセスビルドを試用して問題を報告してくれたアーリーアダプター、そして OpenJDK メーリングリストにフィードバックを提供してくれた熱心な専門家にも同様に感謝しています。

以下の方々は、ビルドの品質に関する貴重なフィードバックを提供したり、良質のバグを記録したり、頻繁にアップデートを提供してくれました。

  • Uwe Schindler (Apache Lucene)
  • Martin Grigorov (Apache Tomcat, Apache Wicket)
  • Rafael Winterhalter (Byte Buddy) $ Yoann Rodière (Hibernate ORM, Validator, Search, Reactive)
  • Marc Hoffman (JaCoCo)
  • Lukas Eder (JOOQ)

さらに、Quality Outreachプログラムを通じて、Java 19の早期アクセスビルドのテストに優れたフィードバックを提供し、リリースの品質向上に貢献してくださった以下のFOSSプロジェクトおよび個人の方々に感謝いたします。

Quality Outreach
https://wiki.openjdk.org/display/quality/Quality+Outreach

  • Apache Derby (Rick Hillegas)
  • Apache Zookeeper (Enrico Olivelli)
  • BNYM Code Katas (Rinat Gatyatullin)
  • RxJava (David Karnok)
  • Apache Johnzon
  • JobRunr
  • MyBatis
  • Renaissance

New in Java 19

何千ものパフォーマンス、安定性、セキュリティのアップデートとともに、Java 19では何十もの新機能と拡張を提供します。この中の4つのプレビュー機能、2つのインキュベータ機能を含む7つの拡張/変更は、JDK Enhancement Proposals(JEPs)プロセスを通じた管理対象のレベルに到達しています。

JDK 19
https://openjdk.org/projects/jdk/19/
JEP 1: JDK Enhancement-Proposal & Roadmap Process
https://openjdk.org/jeps/1

JEP を必要としない新機能には、新しい (D)TLS 署名スキーム、Unicode 14.0 のサポート、追加のDateTimeフォーマット、AArch64 システムでの PAC-RET 保護が含まれます。これらやその他多くの新機能の完全な詳細は、以下のURLでご覧いただけます。

JDK 19 Release Notes
https://jdk.java.net/19/release-notes

JEPプレビュー機能は、Java SEプラットフォームの言語またはVM機能として完全に指定され、完全に実装されたものですが、まだ恒久的なものではありません。将来のリリースで恒久的なものになる前に、実際の使用に基づいた開発者のフィードバックを可能にすべく、JDKのfeature releaseで利用できるようになっています。これはまた、Java SE標準に最終的に組み込まれる前に、ツールベンダーがその機能をサポートする作業の機会を提供するものでもあります。

JEP 12: Preview Features
https://openjdk.java.net/jeps/12

JEPインキュベータモジュールは、最終化されていないAPIやツールを開発者やユーザーの手に渡し、フィードバックを収集することで、最終的にJavaプラットフォームの品質を向上させることを目的としてます。

JEP 11: Incubator Modules
https://openjdk.java.net/jeps/11

Java 19で提供される7つのJEPは、主要な長期的Java技術プロジェクトとハードウェアサポートに対応する4つのカテゴリに分類されます。

Project Amber

JEP 405 – Record Patterns (Preview)

パターン・マッチングを拡張し、より洗練され、合成可能なデータクエリを表現することで、開発者の生産性を向上させます。これは、Recordの値を分解するRecordパターンでJavaプログラミング言語を強化することで実現しています。RecordパターンとTypeパターンを入れ子にすることで、強力で宣言的、かつ複合的なデータのナビゲーションと処理を可能にします。

JEP 405は以下と関連しています。

JEP 427 – Pattern Matching for switch (3rd Preview)

Java のコードセマンティクスを向上させることで、開発者の生産性を改善します。具体的には、switch式とswitch文に対するパターンマッチングでJavaプログラミング言語を強化しています。switchにパターンマッチングを拡張することで、式は、それぞれが特定のアクションを持ついくつかのパターンに対してテストされるようになり、複雑なデータ指向のクエリを簡潔かつ安全に表現できます。

JEP 427は以下と関連しています。

Project Panama

JEP 424 – Foreign Function & Memory API (Preview)

Foreign Function & Memory APIは、4つのユニークな方法で価値を提供します。

使いやすさ

Java Native Interface (JNI) を、優れたpure Javaの開発モデルに置き換えます。

Java Native Interface Specification Contents
https://docs.oracle.com/en/java/javase/18/docs/specs/jni/index.html

パフォーマンス

JNIやsun.misc.Unsafeなどの既存の API に匹敵する、あるいはそれ以上のパフォーマンスを提供します。

汎用性

さまざまな種類の外部メモリ(ネイティブメモリ、永続メモリ、管理ヒープメモリなど)を操作する方法を提供し、時間をかけて他のプラットフォーム(32 ビット x86 など)やC以外の言語(C++やFortranなど)で書かれた外部関数に対応できるようにします。

安全性

プログラムが外部メモリ上で安全でない操作を行うことを許可するが、デフォルトでそのような操作についてユーザーに警告を出すようにしています。

Foreign Function & Memory APIは、JavaプログラムがJavaランタイム外のコードやデータと相互運用できるようにするためのAPIを導入しています。外部関数(JVM外のコード)を効率的に呼び出したり、外部メモリ(JVMが管理していないメモリ)に安全にアクセスすることで、JavaプログラムはJNIの脆さや危険性を伴わずにネイティブライブラリの呼び出しやネイティブデータの処理を行うことができるようになるAPIです。

JEP 424は以下と関連しています。

JEP 426 – Vector API (4th Incubator)

スカラー計算を凌駕する性能を実現します。これは、サポート対象のCPUアーキテクチャ上で最適なベクトル命令に実行時に確実にコンパイルされるベクトル計算を表現するAPIを導入することで、同等のスカラー計算を凌駕する性能を実現するものです。ベクトルAPIはJDK16、17、18でインキュベートされました。JDK 19では、これらのリリースのユーザーからのフィードバックに加え、性能の向上や実装の強化が盛り込まれています。これは、この依存関係を作成するのに十分なほど成熟したForeign Function and Memory APIを使用しています。

JEP 426 relates to:

Project Loom

JEP 425 – Virtual Threads (Preview)

Virtual Threads(仮想スレッド)は軽量なスレッドで、高スループットの並列アプリケーションの作成、保守、監視の労力を劇的に軽減します。

Virtual ThreadsはProject Loom関連の最初のJEPです。Project Loomは、今日の大規模なサーバーアプリケーションのニーズを満たすために、Java の並行処理モデルをアップグレードします。

Javaのスレッドには、多くの優れた点があります。ループ、条件分岐、例外処理など、ユーザが理解できる制御フロー演算子を使った、読みやすい逐次的なコードで、自然なプログラミングモデルを提供しています。ユーザーはデバッグしやすく、優れたサービス性を得ることができ、スタックトレースも読めます。また、スレッドはOSにとって自然なスケジューリングの単位です。このような利点は維持したいと考えています。

問題は、OSによるスレッドの実装が非常に重量級である点です。接続のたびにスレッドを起動するには時間がかかりすぎますし、さらに悪いことに、OSが一度にサポートできるスレッドの数は、サーバが同時に処理できるトランザクションの数を、ハードウェアやネットワークの能力をはるかに下回る数に制限するため、スレッドはサーバのスループットを大きく制限する要因になってしまうのです。

多くの人が、いわゆる「リアクティブ」フレームワークが提供する非同期プログラミングスタイルを採用することを想定していました。同時並行処理をスレッドとして直接表現しなければ、スレッド毎のリクエストモデルがもたらす限界を超えて拡張できますが、大きな代償を払うことになります。つまり、そのすべての層とそのツールのプラットフォームがスレッドを中心に構築されているために、書くのも読むのも難しく、デバッグやプロファイルも非常に困難な、より複雑なコードになってしまう、というものです。Reactiveは、現在のJVMでできる最善の方法かもしれませんが、私たちは、もっとよくしようと考えています。それは、スレッドをより軽く、よりスケーラブルにすることで、開発者が長年うまく使ってきたモデルやツールを使い続けられるようにすることなのです。

現在の開発者には3つの悪い選択肢があります。そこで、Project Loomは、開発者により良い選択肢を提供します。

  • 利用率の低さによるハードウェアの無駄遣い
  • プログラミングモデルや観測性の悪化によるプログラマの労力の無駄遣い
  • Javaから(別の言語へ)の転向
2017年後半Loomの作業開始
2019年7月FiberプロトタイプのEAビルドをリリース
2019年9月JEP 353 (Reimplement Legacy Socket API) をJDK 13でリリース
https://openjdk.org/jeps/353
2020年9月JEP 373 (Reimplement Legacy DatagramSocket API) をJDK 15でリリース
https://openjdk.org/jeps/373
2021年11月structured concurrencyサポートのEAビルドをリリース
仮想スレッドとstructured concurrencyのJEPドラフトを発行
2022年3月JEP 418 (Internet Address Resolution SPI) をJDK 18でリリース
https://openjdk.org/jeps/418
2022年9月JDK 19でプレビューをリリース
Project Loomのタイムライン

JEP 428 – Structured Concurrency (Incubator)

Structured Concurrencyは、構造化された同時実行のためのAPIを導入することで、マルチスレッドプログラミングを簡素化します。(訳注:原文で続いている文章は同じ意味で重複するため、翻訳していません)。Structured Concurrencyは、異なるスレッドで実行される複数のタスクを単一の作業単位として扱うことにより、エラー処理やキャンセル処理を効率化し、信頼性を向上させ、観測可能性を高めることを目的としています。

New Port

JEP 422 – Linux/RISC-V Port

Linux/RISC-V アーキテクチャにJDKを移植します。RISC-VはフリーでオープンソースのRISC命令セットアーキテクチャ (ISA) で、もともとはカリフォルニア大学バークレー校で設計され、現在はRISC-V Internationalの後援のもと共同開発されています。既に様々な言語ツールチェーンでサポートされています。RISC-Vハードウェアの普及に伴い、JDKの移植は開発者にとって価値あるものとなっています。

RISC-V
https://en.wikipedia.org/wiki/RISC-V
RISC-V International
https://riscv.org/

Resources

Javaは、今日の技術トレンドの中でNo.1のプログラミング言語であり続けています。Java 19の改良が予定通り行われたことが示すように、綿密な計画とエコシステムの継続的な関与を通じて、Javaプラットフォームは最新の開発とクラウドでの成長に十分対応できる位置にあります。

ニュースやアップデートの最新情報は、次の方法で入手できます。

Dev.javaJavaの知識を深め、コミュニティに参加するためのOracleの専用ポータルサイト
Inside.javaOracle Javaチームによるニュースおよび意見を見るためのサイト
Inside.java ポッドキャストJava開発者向けのオーディオ・ショーで、言語、JVM、OpenJDK、プラットフォーム・セキュリティ、LoomやPanamaなどのイノベーション・プロジェクト、そしてその間にあるあらゆることについて、OracleでJavaを作成している人が直接説明します。
Inside.java ニュースキャストInside.Javaポッドキャストをビデオ形式に拡張したビデオ番組
Java on YouTubeJavaの専門知識を深めるのに役立つ、OracleのJava関連動画コレクション
OpenJDKメーリングリストお気に入りの OpenJDK プロジェクトの進捗状況を知ることができる
Twitter
@OpenJDK
@Java
Javaの継続的な進化に関するアップデートやニュースを提供するソーシャルストリーム
Java MagazineOracleのJavaに関するデジタル出版物
開発者による開発者のための技術記事を提供しています

JavaOne is back!

Javaテクノロジーの継続的な革新に伴い、OracleはプレミアJava開発者会議であるJavaOneを復活させることを誇りに思っています。JavaOneの復活は、オラクルのテクノロジー・リーダーシップとコミュニティ・スチュワードシップに対するコミットメントの証です。

今年のカンファレンスでは、Java言語とプラットフォーム、クラウド、データベース、AIと機械学習、ツーリング、DevOps、Java Cardなどに関連する技術トピックの深さと幅にまたがるコンテンツとともに、複数のJava 19関連セッションに没頭できます。

期間限定で、開発者は「INSIDEJAVA」プロモーションコードを使用すると、小売価格から400ドル(USD)の割引を受けることができます。皆様のご参加をお待ちしております。

登録はこちらから: https://oracle.com/javaone

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中