また、PublicでEOLを迎えたJDKに対して、サポート期間を延長してバグ修正対応、Q&A対応なども行っていました。今までも、こうしたサポートを受けてこられた企業ユーザにとって今回の変更は、とくに今までと変わらない状況かと思います。こうした企業ユーザは、今後もLong Term Support(LTS)を提供するタイミングJava 11、17、23(3年ごと、バージョン番号で6飛ばし)でのアップグレードをご検討ください。
Java SE 9からはこれらのオプションをまとめた新しい--releaseオプションが追加されています。これを利用することで、指定した環境用のクラスコードを出力してくれます。たとえば、下記の例のようにOpenJDK 11の環境で、Java SE 7のコードを「javac --release 7 Test.java」としてコンパイルが可能です。
この場合Java SE 7用のクラスファイルが生成され、さらにJava VM 11の環境でコードを動かすことができます。ソースコード未修正で環境をアップデートしたい場合は、今後--releaseオプションをご使用ください。
Java SE 7のソースコード例(Test.java)
public class Test{
public static void main(String... args){
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int number : numbers) {
System.out.println("number = " + number);
}
}
}
OpenJDK 11がインストールされている環境で下記を実行します。
$ javac --release 7 Test.java
$ java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
$ java Test
number = 1
number = 2
number = 3
number = 4
number = 5
number = 6
number = 7
number = 8
number = 9
number = 10
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
};
それ以外で筆者が注目しているのは、JEP 310(JDK 10)、JEP 341(JDK 11)など、Class Data Sharing(CDS)機能に対する改善です。Function as a ServiceやDockerなどのコンテナ環境で、Javaアプリケーションを高速に起動したいニーズがあります。これを改善するためにJDK 8u40以降でCDSに対していくつか改善されています。
実際に、JRubyのアプリケーションで30%高速に起動できるようになったというデータがある他、アプリケーションによっては 50%の高速化も可能です。Javaの起動時間が遅いと感じる方は、ぜひ、Class Data Sharingをお試しください。