原文はこちら。
The original article was written by David Delabassee (DevRel – Java Platform Group at Oracle).
https://inside.java/2022/02/10/quality-heads-up/
OpenJDK Quality Groupは、リリースの全体的な品質向上の手段としてOpenJDKビルドを使うFOSSプロジェクトのテストを推進しています。
Quality Outreach
https://wiki.openjdk.java.net/display/quality/Quality+Outreach
このHeads upは、関係するプロジェクトに送られる定期的なコミュニケーションの一部です。
JDK 18 Rampdown Phase 2 & JDK 19 Early-Access Builds
https://mail.openjdk.java.net/pipermail/quality-discuss/2022-January/001077.html
このプログラムの詳細と参加方法については、上記wikiをご覧ください。
JDK 19: Constant class entries ending in ‘/’
JDK 19までは、JVMは (1)クラスファイルのメジャーバージョンが49より小さい(JDK 1.5より昔)もので、(2) そのクラスの名前が /
で終わっているクラスをロードしていますが、これはJVM仕様の4.2.1に違反しているため、JDK19で対処されることになりました。
4.2.1. Binary Class and Interface Names [4.2.1. Binary Class and Interface Names]
https://docs.oracle.com/javase/specs/jvms/se17/html/jvms-4.html#jvms-4.2.1
For historical reasons, the syntax of binary names that appear in
4.2.1. Binary Class and Interface Namesclass
file structures differs from the syntax of binary names documented in JLS §13.1. In this internal form, the ASCII periods (.
) that normally separate the identifiers which make up the binary name are replaced by ASCII forward slashes (/
). The identifiers themselves must be unqualified names (§4.2.2).
(歴史的理由で、クラスファイルの構造に現れるバイナリ名の構文は、JLS §13.1に記載されているバイナリ名の構文とは異なります。この内部形式では、通常はバイナリ名を構成する識別子を分離するASCII文字のピリオド (.
) がASCII文字のスラッシュ (/
) に置き換わっています。識別子自体はunqualified name でなければなりません。)
JDK 19では、JDK 1.5より昔のクラスに対して、JDK 1.5以後の新しいクラスですでに行っているように、ClassFormatError
例外をJVMがスローします。この問題はJDK1.5より前のクラスのみに影響するため、互換性リスクは非常に低いと予想されます。
Call to Action
JDK 1.5より昔のクラスを使っているコードベースがないのであれば、特にアクションは必要ありません。質問やフィードバックは、hotspot-devメーリングリストにお願いします。
hotspot-dev — Technical discussion about the development of the HotSpot virtual machine that’s not specific to any particular component
https://mail.openjdk.java.net/mailman/listinfo/hotspot-dev
hotspot-devメーリングリストのアーカイブ
https://mail.openjdk.java.net/pipermail/hotspot-dev/