1前書き

Java SE 10の実装であるhttp://openjdk.java.net/projects/jdk/10[JDK 10]は、2018年3月20日にリリースされました。

この記事では、JDK 10で導入された新機能と変更点について説明します。


2ローカル変数型推論

この機能に関する詳細な記事へのリンクをたどってください。


3変更不可能なコレクション

Java 10の変更不可能なコレクションに関連するいくつかの変更があります。

3.1.

のコピー()


java.util.List



__java.util.Map


および


java.util.Setはそれぞれ、新しい静的メソッド

copyOf(Collection)__を取得しました。

与えられた__Collectionの変更不可能なコピーを返します。

@Test(expected = UnsupportedOperationException.class)
public void whenModifyCopyOfList__thenThrowsException() {
    List<Integer> copyList = List.copyOf(someIntList);
    copyList.add(4);
}

そのようなコレクションを変更しようとすると、

__ java.lang.UnsupportedOperationException

__runtime例外が発生します。

3.2.

toUnmodifiable ** ()


__java.util.stream.Collectors


Stream


intを変更不可能な

List




Map


、または

Set__に収集するための追加のメソッド

@Test(expected = UnsupportedOperationException.class)
public void whenModifyToUnmodifiableList__thenThrowsException() {
    List<Integer> evenList = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .collect(Collectors.toUnmodifiableList());
    evenList.add(4);
}

そのようなコレクションを変更しようとすると、

__ java.lang.UnsupportedOperationException

__runtime例外が発生します。


4

オプション


.orElseThrow() **


java.util.Optional



java.util.OptionalDouble



__java.util.OptionalInt


、および


java.util.OptionalLong


eachは、引数を取らない新しいメソッド


orElseThrow()を取得し、


NoSuchElementException

__をスローしません。

@Test
public void whenListContainsInteger__OrElseThrowReturnsInteger() {
    Integer firstEven = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .findFirst()
      .orElseThrow();
    is(firstEven).equals(Integer.valueOf(2));
}

  • これは既存の

    __get()

    __メソッドと同義であり、現在では推奨される方法です。

** 5パフォーマンスの向上

この機能に関する詳細な記事へのリンクをたどってください。


6. コンテナ意識

  • ** JVMはDockerコンテナで実行されていることを認識しており、オペレーティングシステム自体に問い合わせるのではなく、コンテナ固有の設定を抽出します。

ただし、このサポートはLinuxベースのプラットフォームでのみ利用可能です。この新しいサポートはデフォルトで有効になっており、JVMオプションを使用してコマンドラインで無効にすることができます。

-XX:-UseContainerSupport

また、この変更により、JVMが使用するCPUの数を指定する機能を提供するJVMオプションが追加されました。

-XX:ActiveProcessorCount=count

また、DockerコンテナーユーザーがJava Heapに使用されるシステムメモリーの量をよりきめ細かく制御できるように、3つの新しいJVMオプションが追加されました。

-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage

7.ルート証明書

cacertsキーストアは、これまで最初は空でしたが、さまざまなセキュリティプロトコルで使用される証明書チェーンで信頼を確立するために使用できる一連のルート証明書を格納するためのものです。

結果として、TLSのような重要なセキュリティコンポーネントはOpenJDKビルドではデフォルトでは機能しませんでした。

  • ** Java 10では、OpenJDKビルドを開発者にとってより魅力的なものにし、それらのビルドとOracle JDKビルドの違いを減らすために、オラクルはOracleのJava SEルートCAプログラムでルート証明書をオープンソース化しました。


8廃止予定および削除


8.1. コマンドラインオプションとツール

ネイティブメソッドの実装に必要なCヘッダとソースファイルを生成するツール

__javah


がJava 10から削除されました – 現在では、代わりに


javac -h

__を使用できます。


__policytool

__は、ポリシーファイルの作成と管理のためのUIベースのツールでした。これは今削除されました。ユーザはこの操作を実行するために簡単なテキストエディタを使用することができます。


__java -Xprof


オプションを削除しました。このオプションは、実行中のプログラムをプロファイルし、プロファイリングデータを標準出力に送信するために使用されました。ユーザーは代わりに


jmap

__toolを使用するようになりました。


8.2. API

廃止予定のjava.security.aclパッケージは、removeRemoval = trueとしてマークされており、将来のバージョンのJava SEでは削除される可能性があります。これは

__java.security.Policy

__および関連クラスに置き換えられました。

同様に、java.security。\ {Certificate、Identity、IdentityScope、Signer} APIは

forRemoval = true

とマークされています。


9時間ベースのリリースバージョン管理

Java 10以降、Oracleは時間ベースのJavaリリースに移行しました。これには次のような影響があります。


  1. 半年ごとの新しいJavaリリース

    2018年3月のリリースはJDKです

10日、2018年9月のリリースはJDK 11などです。これらは呼ばれています
機能のリリース。少なくとも1つか2つのリリースが含まれる予定です。
重要な機能


機能リリースのサポートは6ヶ月間

だけ持続します。

次の機能リリースまで
。 ** 長期サポートリリースはLTSとしてマークされます。そのような支援

発売は3年間**
。 Java 11はLTSリリースになります


  • __ java -version

    __willにGAの日付** が含まれるようになりました。これにより、リリースがどのくらい古いかを簡単に識別できます。

$ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)


10結論

この記事では、Java 10によってもたらされた新機能と変更点について説明しました。

いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/core-java-10[over on GitHub]にあります。

  • «** 前へ