Java 10ガイド
1前書き
Java SE 10の実装であるhttp://openjdk.java.net/projects/jdk/10[JDK 10]は、2018年3月20日にリリースされました。
この記事では、JDK 10で導入された新機能と変更点について説明します。
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()
__メソッドと同義であり、現在では推奨される方法です。
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リリースに移行しました。これには次のような影響があります。
-
半年ごとの新しい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]にあります。
-
«** 前へ