オラクルは火曜日にJava開発者向けの12個の新機能を搭載したJava 22(JDK 22)をリリースした。
Java SE Platform Edition のオープン ソース リファレンス実装である OpenJDK に基づいて、商用 Oracle JDK はサブスクリプション ライセンスで提供され、OpenJDK は GPL ライセンスで提供されます。
JDK 22はFeatureリリースであり、Oracleは次のFeatureリリースまで6か月間サポートします。JDK 21などのLTSリリースは最大8年間サポートされます。次のLTSリリースはJava 25で、2025年9月に予定されています。
Oracleは、Javaは「今日のテクノロジートレンドにおけるナンバーワン言語」であると述べています(それが何を意味するのかは分かりませんが)。また、「企業/IT組織全体で最も多く利用されている言語」でもあると述べています。これもやや曖昧ですが、それでも納得できます。Oracleが主張する630億台のアクティブなJava仮想マシン(JVM)と410億台のクラウドベースJVMは、実際に誰かが利用しているものです。
あまり適格でないコンテキストでの Java は、さまざまな調査で引き続き上位のプログラミング言語にランクされており、昨年 Oracle のライセンス条件のコストに関する懸念が提起されたにもかかわらず、依然としてエンタープライズ テクノロジーの中核を担っています。
ソフトウェア会社 Perforce が 440 人の Java 開発者を対象に実施した 2024 年の調査 [PDF] によると、「回答者の 60% が、自社では来年中に Java 開発者を追加する予定であり、42% が Java 開発ツールの予算を増やす予定であると回答した。」
Java のメモリ安全性が完全に完璧というわけではないものの、強力なメモリ安全性保証のない言語 (特に C++) を避けるという業界全体の推進から Java は恩恵を受けているようです。
Java 開発担当副社長の Bernard Traversat 氏はThe Registerに対し、メモリ安全性に対する国家的な取り組みが Java コミュニティに良い影響を与えていると語った。
「米国政府はすでに、人々や業界に対し、メモリ安全性言語の採用を促している。現在、データを取り巻く状況は非常に複雑で、リスクも非常に大きいため、プログラミングのランタイム環境に、できる限りの安全性と制御を組み込むようにしたいと考えているからだ」と同氏は説明し、メモリ安全性がJavaが、特に企業の間で人気を保っている理由の一つであると指摘した。
オラクルの改訂版Javaライセンス条項は、ほとんどの組織にとって2~5倍高価になる
続きを読む
「そして今、私たちはAIの世界に足を踏み入れつつあり、そこではほぼすべてをリアルタイムで非常に速く制御するシステムが存在するでしょう。そのため、セキュリティとメモリアクセス制御の最大のメリットを提供するテクノロジーで、これらすべてのシステム、制御システムを構築したいと考えています。」
AI に対する業界の関心が Java 開発に影響を与えたかどうかを尋ねられた Traversat 氏は、答えはイエスでもありノーでもあると答えました。
「通常、これらの機能を構築する際には、『この機能は特定のユースケースのためだけに導入します』とは言いません」と彼は説明した。「私たちは、開発の必要性をどこに見出したかを、より包括的な視点で捉える傾向があります。AI/MLは明らかに非常に重要ですが、大規模なサービスを運用する規模も重要です。」
しかし、ZGCをはじめとするメモリ管理を中心とした当社の機能については、その通りです。すべてのデータを保持したいアプリケーションクラスにおいて、すべてのデータをメモリ内で処理できることが非常に重要になることを認識しています。ペタバイトシステムの時代が到来しつつあります。テラバイト規模、そして今やマルチテラバイト規模のアプリケーションを導入しているお客様もいらっしゃいます。ですから、私たちは推進していく必要があることを認識しています。AI・MLの時代においては、データ、データ、データ、そしてデータが溢れかえることは明らかです。
Java 22 には、12 個の JDK 拡張提案 (JEPS) が組み込まれています。
G1のリージョンピンニング(JEP 423)は、Javaコードがメモリを解放するメカニズムであるガベージファースト(G1)ガベージコレクタ(GC)を指します。G1のデフォルトのガベージコレクション動作では、特定の重要な操作においてガベージコレクションを無効にし、メモリ内のオブジェクトの移動や関連するポインタの混乱を回避します。リージョンピンニングは、重要なオブジェクトを所定の位置に保持し、他のオブジェクトはクリーンアップ中に移動されます。つまり、この提案により、JavaスレッドはG1ガベージコレクション操作の完了を待つ必要がなくなります。
JDK 21 の Java ガベージ コレクションの改善、具体的には Z ガベージ コレクターが最近 Netflix に採用され、その結果計算ワークロードが軽減されたと報告されています。
Super(...) の前のステートメント (プレビュー) (JEP 447) は、親クラスのコンストラクターの呼び出しの前にステートメントを配置できるようにすることで、Java コンストラクターの呼び出し方法を改善します。
- 「オラクルに契約内容を説明する必要があった」とビッグレッド監査後にCIOが語る
- 3月のパッチ火曜日、Hyper-Vがゲストホスト脱出クラブに加わる
- ママたちよ、子供をプログラマーに育てないで、ジェンセン・フアンが警告
- やり直し:楽しみと利益のためにOSスタックを再起動
Foreign Function & Memory API (JEP 454) は、JDK 19 (JEP 424)、JDK 20 (JEP 434)、JDK 21 (JEP 44) における以前の提案を改良したもので、Java コードが Java 仮想マシン (JVM) の外部から外部関数を呼び出す方法を実装します。これは、Java Native Interface (JNI) の代替となることを目的としています。
名前のない変数とパターン(JEP 456)は、JDK 21のJEP 443を改良したもので、未使用の変数とパターンを安全に実装し、静的アナライザーの警告を回避する方法を提供します。コンパイラ、アナライザー、リンターなどは、変数が宣言されているにもかかわらず一度も使用されていない場合にエラーを発する傾向があります。
クラス ファイル API (プレビュー) (JEP 457) は、JVM の Java バイトコードを含む Java クラス ファイルを解析、生成、変換する標準 API を提供します。
複数ファイルのソースコード プログラムの起動 (JEP 458) は、複数の Java ソース コード ファイルで構成されるプログラムを実行できるように、Java ランチャーのソース ファイル モードを修正します。
「JEP 458 では、Java ファイル、複数の Java ファイルを Java コマンドの上に置くだけで、その下でさまざまな javac コンパイルを実行していれば、Java が javac [Java コンパイラ] を呼び出すだけで、アプリケーションを直接実行できるようになります」と Traversat 氏は説明した。
文字列テンプレート (第 2 プレビュー) (JEP 459) は、JDK 21 の JEP 430 を拡張して、実行時に計算される値を含むテキスト文字列である文字列テンプレートをサポートします。
Vector API (Seventh Incubator) (JEP 460) は、ハードウェアに最適化されたベクトル命令を使用して実行時にコンパイルされるベクトル計算を行う方法を提供します。
Stream Gatherers (プレビュー) (JEP 461) により、Stream API がより柔軟になり、ストリーミング データ パイプラインはカスタム中間操作を通じてデータを処理できるようになります。
構造化並行性(第2プレビュー)(JEP 462)は、スレッドリークやキャンセル遅延を排除する並行プログラミングスタイルを推進するために、構造化並行性のためのAPIを追加します。構造化並行性は、異なるスレッド内のタスクグループを単一の作業単位として処理するため、コードの監視が容易になります。
スコープ付き値 (第 2 プレビュー) (JEP 464) は、スレッド内および子スレッドと不変のデータを安全に共有する方法を提供します。
最後に、「暗黙的に宣言されたクラスとインスタンスmainメソッド(第2プレビュー)(JEP 463)」があります。これは、Javaを学生にとってより分かりやすくするための取り組みです。ソースファイルでクラスとmainメソッドを暗黙的に宣言できるため、プログラマーは基本的に定型的なコードを書く必要がなくなります。そのため、JavaのHello, World!プログラムのコード行数は少なくなります。
JEP 463 で約束された Hello, World! コードの簡素化を示す Oracle のスライド – クリックして拡大
これは、若いプログラマーを参加させたいという Java コミュニティのニーズに合致していますが、教育機関が他の言語に重点を置くと、これはより困難になります。
トラバーサット氏によると、これはJava言語の冗長性を減らし、初心者にとってより扱いやすいものにするためのプロジェクト・アンバーの一環である。「私たちはJavaの冗長性を減らすために多額の投資を行っています。」®
DevClass.com で Tim Anderson による Java ニュースの解説をぜひお見逃しなく。