0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenJ9 v0.51でのプロパティ値の変化

Posted at

はじめに

"OpenJ9 0.51.0’s System.initProperties() — What Every Java Developer Should Know?"というブログ記事があります。今年5月にリリースされたSemeru Runtimes (OpenJ9 v0.51)からuser.languageなどのプロパティの初期化が変わったという内容ですが、実際に何がどう変わったのかを確認してみました。

結論から言うと、macOSを英語以外の設定で使っている場合は大きな変化がありましたが、macOSを英語設定で使っている人や他のOS (Windows, Linux)のユーザーにはほとんど影響がありません。

JavaとOpenJ9のバージョン対応

LTS (Long Term Support)になっているJavaのバージョンは現在8, 11, 17, 21の4つがあり、基本的に3ヶ月ごとに脆弱性の修正などが行われます。OpenJ9 v0.51は2025年第2四半期にリリースされた下記のJavaバージョンに対応します。

  • Java 8: 8u452
  • Java 11: 11.0.27
  • Java 17: 17.0.15
  • Java 21: 21.0.7

OpenJ9を採用しているSemeru Runtimesで下記のようにjava -versionを実行すると、build openj9-0.51.0の部分にOpenJ9のバージョンが入っています。プロパティのjava.vm.versionでも確認できます。

% jdk-21.0.7+6/Contents/Home/bin/java -version 
openjdk version "21.0.7" 2025-04-15 LTS
IBM Semeru Runtime Open Edition 21.0.7.0 (build 21.0.7+6-LTS)
Eclipse OpenJ9 VM 21.0.7.0 (build openj9-0.51.0, Jre 21 Mac OS X aarch64-64-Bit 20250415_442 (JIT enabled, AOT enabled)
OpenJ9   - 31cf5538b0
OMR      - 9bcff94a2
JCL      - 26c2dc3d801 based on jdk-21.0.7+6)
% jdk-21.0.7+6/Contents/Home/bin/java -XshowSettings -version 2>&1 | grep java.vm.version
    java.vm.version = openj9-0.51.0

macOSの場合

以前のバージョンでは、OSの言語設定に関係なくuser.language = enとなっていました。v0.51からはuser.languageがOSの言語設定に従うようになり、日本語環境ではjaに変わりました。これにより、出力されるメッセージの言語が切り替わっています。
なお、file.encodingUTF-8のままで変化はありません。

macOSの日本語環境で実行した例を示します。

v0.49
% jdk-21.0.6+7/Contents/Home/bin/java -XshowSettings -version 2>&1 | grep language 
    user.language = en
% jdk-21.0.6+7/Contents/Home/bin/javac Foo.java                                   
Foo.java:4: error: reached end of file while parsing
}
 ^
1 error
v0.51
% jdk-21.0.7+6/Contents/Home/bin/java -XshowSettings -version 2>&1 | grep language
    user.language = ja
% jdk-21.0.7+6/Contents/Home/bin/javac Foo.java
Foo.java:4: エラー: 構文解析中にファイルの終わりに移りました
}
 ^
エラー1個

また、以前はLANG環境変数による指定がuser.languageなどのプロパティに反映されていましたが、v0.51からはLANGを無視するようになりました。

v0.49
% LANG=fr_FR.UTF-8 jdk-21.0.6+7/Contents/Home/bin/java -XshowSettings -version 2>&1 | grep language
    user.language = fr ← LANGに従ってフランス語に変わっている
v0.51
% LANG=fr_FR.UTF-8 jdk-21.0.7+6/Contents/Home/bin/java -XshowSettings -version 2>&1 | grep language 
    user.language = ja ← OSの言語設定の日本語のまま

Linuxの場合

v0.51で変化はありません。LANG環境変数に従います。
LANGが設定されていない場合はuser.language = en, user.country = US, file.encoding = ANSI_X3.4-1968となります。

Windowsの場合

こちらもv0.51でほとんど変化はありません。OSの言語設定に従い、日本語環境ではuser.language = jaになります。
file.encodingはJavaのバージョンによって異なり、Java 17以前ではfile.encoding = MS932でしたが、Java 21以降ではfile.encoding = UTF-8となっています。

他のOSの場合

AIXやz/OSについては確認していません。

まとめ

OpenJ9 v0.51でプロパティの初期化方法が変わり、英語以外の設定でmacOSを使っている場合は以前と挙動が変わります。LinuxやWindowsの場合は実用上違いはないと言っていいでしょう。

リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?