7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Java11 での変更点

Last updated at Posted at 2018-10-21

変更点

2018/09/25にJava11がリリースされました。

以下が、Java11でのJEPです。

  • 181: Nest-Based Access Control
  • 309: Dynamic Class-File Constants
  • 315: Improve Aarch64 Intrinsics
  • 318: Epsilon: A No-Op Garbage Collector
  • 320: Remove the Java EE and CORBA Modules
  • 321: HTTP Client (Standard)
  • 323: Local-Variable Syntax for Lambda Parameters
  • 324: Key Agreement with Curve25519 and Curve448
  • 327: Unicode 10
  • 328: Flight Recorder
  • 329: ChaCha20 and Poly1305 Cryptographic Algorithms
  • 330: Launch Single-File Source-Code Programs
  • 331: Low-Overhead Heap Profiling
  • 332: Transport Layer Security (TLS) 1.3
  • 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
  • 335: Deprecate the Nashorn JavaScript Engine
  • 336: Deprecate the Pack200 Tools and API

JDK9からのリリースモデル

JDK9以降から6ヶ月ごと(3月と9月)にフィーチャーリリースを行うというリリースモデルに変更されました。また、脆弱性対応やバグフィックスが、1月、4月、7月、10月の年間計4回でるように固定化されました。バイナリ提供に関して今までは、Oracleから無償でバイナリが提供されていましたが、9以降は無償なバイナリがOpenJDKからの提供に変わります。9以降のOracleJDKは有償になります。また8以前では、OracleJDKとOpenJDKとで技術的な差分がありましたが、これがなくなりました。

LTS

JDK11以降OracleJDKは3年に1度リリースになります。Oracleの有償サポート最低8年でセキュリティアップデートを提供してくれます。また、JDK11以降、開発、テスト、試作、デモの用途に無償で利用可能になります。

Javaは今も無償(その他、JDKとは関係なし)

Javaのサポートとアップデートに関して、Javaチャンピオン数十名が執筆したJava Is Still Freeというドキュメントの日本語ドキュメントが公開されました。

コーディングに影響が大きそうなJEP

JEP181 Nest-Based Access Control

Java10までは、インナークラスからアウタークラスのprivateメソッドを呼び出すコードは変わったバイトコード出力でした。

JDK10で以下のコードを見てみます。

Outer.java
public class Outer {
    private int i = 0;
    
    public class Inner {
        public int i() {
            return i;
        }
    }
}

コンパイル後、クラスファイルを逆アセンブルしてみます。

$ javap -p -c Outer\$Inner
Compiled from "Outer.java"
public class Outer$Inner {
  final Outer this$0;

  public Outer$Inner(Outer);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #1                  // Field this$0:LOuter;
       5: aload_0
       6: invokespecial #2                  // Method java/lang/Object."<init>":()V
       9: return

  public int i();
    Code:
       0: aload_0
       1: getfield      #1                  // Field this$0:LOuter;
       4: invokestatic  #3                  // Method Outer.access$000:(LOuter;)I
       7: ireturn
}

次に同じコードをJDK11でコンパイルして逆アセンブルしてみます。

$ javap -p -c Outer\$Inner
Compiled from "Outer.java"
public class Outer$Inner {
  final Outer this$0;

  public Outer$Inner(Outer);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #1                  // Field this$0:LOuter;
       5: aload_0
       6: invokespecial #2                  // Method java/lang/Object."<init>":()V
       9: return

  public int i();
    Code:
       0: aload_0
       1: getfield      #1                  // Field this$0:LOuter;
       4: getfield      #3                  // Field Outer.i:I
       7: ireturn
}

JDK10でコンパイルした方は、InnerクラスはOuterのstaticメソッドaccess$000を呼び出します。JDK11では、Innerクラスはaccess$000メソッドではなくOuterクラスのOuter.iを直接呼び出しています。

JVM Language Summit 2018でこれに関する動画が公開されています。

JEP309 Dynamic Class-File Constants

Javaクラスファイル形式を拡張して、動的な定数をサポートします。Java10までは、プリミティブとリテラルを持つStringだけConstant Poolに格納できましたが、これ以外もConstant Poolで扱えるように。 動的な定数の利点は、言語やコンパイラの自由度が上がる、バイトコード上の定数の自由度が上がるということがあるようです。

JVM Language Summit 2018でこれに関する動画が公開されています。

JEP320 Remove the Java EE and CORBA Modules

JavaEEおよびCORBAモジュールを削除されました。対象は、CORBA、JAXB、JAX-WS、Common Activation Framework、JTA。これらの代行モジュールは以下になります。

  • JAX-WS -> jaxws-api
  • JAXB -> jaxb-api
  • JAF -> javax.activation-api
  • Common Annotations -> javax.annotation-api
  • JTA -> javax.transaction-api

削除理由は、開発速度の違いJavaSEの速度についていけないためのようです。今後はJakartaEEとして開発がされるようです。

JEP321 HTTP Client (Standard)

HTTP Client APIを標準化されました。非同期をサポートし、HTTP/2もサポートしました。モジュール名はjava.net.httpです。

これに関する動画が公開されています。

JEP323 Local-Variable Syntax for Lambda Parameters

Java10で導入されたローカル変数型推論と同じようにラムダパラメータでもvarが使えるようになりました。更にアノテーションがつけられるようになりました。
これに関する動画が公開されています。

7
11
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
7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?