メモ:Java8とJava11の差
Java8とJava11の差
同じソースでもJava8とJava11では動作が異なります。
次のコードはディスプレイのサイズを取得しています。これをJDK8とJDK11で動かすと異なる結果となります。
// HelloWorld.java
import java.awt.*;
public class HelloWorld{
public static void main(String[]args_){
System.err.println("win-height="
+GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getDefaultScreenDevice()
.getDefaultConfiguration()
.getBounds()
.height
);
}
}
次の様にJava8とJava11でコンパイルし動作させると
:: A10_test.bat @echo off set JDK8=C:\Program Files\Java\jdk1.8.0_152 set JDK11=C:\Program Files\Java\jdk-11 echo JDK8 del /q /s HelloWorld.class > NUL 2>&1 "%JDK8%\bin\javac" HelloWorld.java "%JDK8%\bin\java" HelloWorld echo JDK11 del /q /s HelloWorld.class > NUL 2>&1 "%JDK11%\bin\javac" HelloWorld.java "%JDK11%\bin\java" HelloWorld echo build-JDK8 run-JDK11 del /q /s HelloWorld.class > NUL 2>&1 "%JDK8%\bin\javac" HelloWorld.java "%JDK11%\bin\java" HelloWorld del /q /s HelloWorld.class > NUL 2>&1 pause
次の結果が得られます。
JDK8 win-height=2160 JDK11 win-height=1440 build-JDK8 run-JDK11 win-height=1440 続行するには何かキーを押してください . . .
画面は4KなのでJDK8の動作が正しく、JDK11は正確ではありません。
Java9では多くのクラスが初期化時に異常を起こしたり、JVM自体が発狂したりしました。それに比べると、ましにはなりましたが、まだまだ採用できるレベルではなさそうです。
| 固定リンク

