原文はこちら。
The original article was written by Derek Keeler (Principal Software Engineering Manager, Java Engineering Group, Microsoft).
https://devblogs.microsoft.com/java/microsoft-build-of-openjdk-october-2022-psu-release/
Microsoft Build of OpenJDKの最新のパッチおよびセキュリティアップデートのリリースをお知らせします。OpenJDKのアップストリームコミュニティから通常のアップデートを確認できます。
Microsoft Build of OpenJDK
https://microsoft.com/openjdk
OpenJDK 17の修正リスト
OpenJDK 11の修正リスト
また、このビルドに施した追加作業はリリースノートから確認できます。
Release Notes for the Microsoft Build of OpenJDK
https://learn.microsoft.com/en-us/java/openjdk/release-notes
今回のリリースから、開発者は、新たにできた jdk17u および jdk11u の Microsoftリポジトリでソースコードを閲覧すれば、Microsoft Build of OpenJDKに加えられた具体的な変更点を確認できるようになりました。
GitHub – microsoft/openjdk-jdk17u at release/jdk-17.0.5_8
https://github.com/microsoft/openjdk-jdk17u/tree/release/jdk-17.0.5_8
GitHub – microsoft/openjdk-jdk11u at release/jdk-11.0.17_8
https://github.com/microsoft/openjdk-jdk11u/tree/release/jdk-11.0.17_8
新たな実験的機能
今回のリリースでは、Scalar Replacement (スカラー置換) の機会を増やすことで、Escape Analysis (エスケープ解析) の結果を改善する実験的な新機能を追加しました。この機能の目的は、マージに関わるオブジェクトのスカラー置換を促進するために、オブジェクト割り当てマージを簡略化することです。この機能強化の簡易版はJDK 11に追加され、より多くの機会を利用するバージョンがJDK 17に追加されています。この最適化に関する議論は、hotspot-compiler-devメーリングリストで行われています。この最適化の最新の進化版については、現在レビューされているPull Requestをご覧ください。
The hotspot-compiler-dev Archives
https://mail.openjdk.org/pipermail/hotspot-compiler-dev
8289943: Simplify some object allocation merges #9073
https://github.com/openjdk/jdk/pull/9073
この最適化のJDK 17バージョンを社内でベンチマークをとったところ、複数のワークロードでスカラー置換の回数が3%~8%増加し、スループットが2%増加しました。この最適化のJDK 11バージョンでは、メモリを大量に消費する運用サービスにおいて、P99の平均待ち時間が8%減少することが実証されました。さらなる性能テストは現時点では未定です。
この機能を有効にするには、以下のJVMフラグを利用する必要があります。
-XX:+UnlockExperimentalVMOptions -XX:+ReduceAllocationMerges
この新たなエスケープ解析の作業に関する議論に参加するには、以下のリポジトリに参加してください。
[JDK 11] Escape Analysis #9
https://github.com/microsoft/openjdk-jdk11u/discussions/9
[JDK 17] Escape Analysis #3
https://github.com/microsoft/openjdk-jdk17u/discussions/3
Microsoft Build of OpenJDKのソースコードをGitHubに公開
Microsoft Build of OpenJDKのソースコードと、OpenJDK 17およびOpenJDK 11のアップストリームのソースコードの GitHub との差分を見れば、Microsoft Build of OpenJDKに適用した変更を開発者が確認できるようになりました。
openjdk/jdk17u:master と microsoft/openjdk/jdk17u:release/jdk-17.0.5_8 の差分
https://github.com/openjdk/jdk17u/compare/master…microsoft:openjdk-jdk17u:release/jdk-17.0.5_8
openjdk/jdk11u:master と microsoft/openjdk/jdk11u:release/jdk-11.0.17_8 の差分
https://github.com/openjdk/jdk11u/compare/master…microsoft:openjdk-jdk11u:release/jdk-11.0.17_8
OpenJDKの内部ミラーをコミュニティが存在するGitHub上に出そうと尽力し、10月のリリースでついにそれを達成しました。今後数ヶ月間の多数の作業で、自分たちのプロセスを望ましい状態にする予定ですが、ようやく開発者が期待する形にできたことを嬉しく思っています。唯一内部に残しているものが、GitHub Actions のワークフローではなく、Azure DevOps pipelines を使ってビルドプロセスを進めています。プルリクエストのプロセスは、完全にオープンになるように変更され、OpenJDKのソースで定義されているものと同じになっていることに注意してください。
Microsoft Build of OpenJDKを含むコンテナーイメージ
コンテナーイメージも更新され、Microsoft CBL-Mariner 2.0 と Eclipse Temurin バイナリを使ったOpenJDK 8 イメージ (CBL Mariner ベース) が入りました。
Eclipse Temurin
https://adoptium.net
イメージは以下のリポジトリで公開されています。
mcr.microsoft.com/openjdk/jdk:<tag>
List of tags
Base OS | OpenJDK 17 | OpenJDK 11 | OpenJDK 8 |
Ubuntu 20.04 http://releases.ubuntu.com/focal/ | 17-ubuntu | 11-ubuntu | N/A |
CBL Mariner 2.0 https://github.com/microsoft/CBL-Mariner | 17-mariner | 11-mariner | 8-mariner |
CBL Mariner 1.0 https://github.com/microsoft/CBL-Mariner | 17-mariner-cm1 | 11-mariner-cm1 | N/A |
CBL-Mariner 2.0 Distroless | 17-distroless | 11-distroless | 8-distroless |
詳細は以下のドキュメントをご覧ください。
Microsoft Build of OpenJDK のコンテナー イメージ / Container images for the Microsoft Build of OpenJDK
https://learn.microsoft.com/java/openjdk/containers
Distroless Images
CBL-Mariner 2.0ベースのDistrolessイメージが公開されました。 使い方の詳細は以下のドキュメントをご覧ください。
Distroless
https://learn.microsoft.com/java/openjdk/containers#distroless
AArch64/Arm64 images
AArch64 / Arm64コンテナーイメージをお求めであれば、GitHubの以下の議論に参加してください。
Publish AArch64 (Arm64) container images #46
https://github.com/microsoft/openjdk-docker/issues/46
Alpine builds
2022年4月に発表しましたが、現在はOpenJDK for Alpineのビルドが公開されています。コンテナ内でAlpineを使用したい場合は、ユーザー自身でイメージを作成する必要があります。詳細は以下のドキュメントを参照してください。
Alpine images
https://learn.microsoft.com/java/openjdk/containers#Alpine-images
Microsoftは将来、Alpineベースのコンテナイメージを作成しない予定です。その代わりに、CBL-Marinerの Distrolessイメージの利用を推奨します。
CBL-Mariner 1.0について
マイクロソフトのLinuxディストリビューションであるCBL-Marinerバージョン1.0は、2023年中にリタイアする予定です。そのため、既存の11-marinerと17-marinerのタグ付きのMicrosoft Build of OpenJDKのMarinerベースのイメージは、すでにCBL-Mariner 2.0ベースに更新されています。リタイアまでCBL-Mariner 1.0を使い続ける必要があるユーザーは、これらのイメージが最終的に削除されることを承知の上で、依存関係を11-mariner-cm1および17-mariner-cm1のタグに変更する必要があります。
CBL-Dについて
Microsoft CBL-Dチームからのガイドに従い、Microsoft Build of OpenJDKのCBL-Dベースのイメージは、リストから除外されました。現時点ではまだ利用可能ですが、これらのイメージは今後更新されませんので、ユーザーはできるだけ早くCBL-Mariner 2.0に移行する必要があります。Ubuntuベースのイメージに移行することもできます。
Azul Zulu for AzureのEoL (End of Life)
2021年6月30日に発表したように、Azul Zulu for AzureビルドのOpenJDKはもうサポート対象外であり、かつアップデートもされません。
End of Updates, Support and Availability of the Zulu for Azure builds of OpenJDK
https://devblogs.microsoft.com/java/end-of-updates-support-and-availability-of-zulu-for-azure/
https://logico-jp.io/2021/07/12/end-of-updates-support-and-availability-of-the-zulu-for-azure-builds-of-openjdk/
これらのバイナリをホストするリポジトリは早晩Azul Systemsによって削除されます。ユーザーのみなさまは、Microsoft Build of OpenJDKのJava 11およびJava 17、もしくはEclipse TemurinのJava 8に急いで移行してください。