LoginSignup
1
2

More than 1 year has passed since last update.

Java17の新機能をざっくり紹介

Last updated at Posted at 2021-09-19

この記事について

2021/9/14 にリリースされた JDK17 の新機能をざっくりまとめます.1 情報源は基本的にOpenJDKのサイトです.

特に筆者が詳しくない分野については雑に要約してあります.それぞれの詳細は JEP の原文や他の記事などを参照してください.

JEP 306: 常に厳密な浮動小数点演算の復活2

strictfp 指定時と通常時の差を無くし,浮動小数点演算が常に厳密になりました.ほとんどのユーザーには大して影響がないと思われます.

現代のプロセッサでは厳密・非厳密に分けるメリットが薄れたということのようです. strictfp の使用は無意味になったので,警告が出るようになりました.

警告:[strictfp] as of release 17, all floating-point expressions are evaluated strictly and 'strictfp' is not required

JEP 356: 疑似乱数生成器の強化

乱数生成器を交換可能な形で使えるようになりました.

これまで乱数生成を行うクラスが複数3あったのが,新しい java.util.random.RandomGenerator インターフェースで統一的に扱えるようになりました.ファクトリクラスも追加されました.

JEP 382: 新しい macOS の描画パイプライン

Apple Metal API を使ったJava 2D 内部パイプラインが実装されました.
これまでは OpenGL API を使った実装のみでした.

JEP 391: macOS/AArch64 port

Appleの独自プロセッサに対応しました.

JEP 398: アプレットAPIを削除予定に指定

Java9 から非推奨になっていた Applet API が,さらに forRemoval=true になりました.

JEP 403: JDK内部の強いカプセル化

sun.misc.Unsafe のような重要な内部APIを除く,
JDKの内部要素のカプセル化が強化されました.

今回の変更では,--illegal-access コマンドラインオプションによる制限緩和ができなくなりました.

JEP 407: RMI Activation の削除

RMI のうち,Java15 から forRemoval=true な非推奨になっていた RMI Activation が削除されました.

JEP 409: Sealedクラス

継承を制限する sealed クラスが正式に追加されました.

別の解説記事を書いたので,良ければご覧ください.

JEP 410: 実験的なAOT・JITコンパイラを削除

AOT&JITコンパイラは追加以降あまり使われておらず,メンテナスコストがかかるので削除されました.
コンパイラ作成に必要なインターフェースは維持されます.
Graalコンパイラを使いたければGraalVMが使える,とのことです.

JEP 411: Security Manager を削除予定に指定

Security Manager が forRemoval=true の非推奨になりました.

アプレットの削除に伴い必要性が薄れたこと,現在知られている多くのリスクに Security Manager では十分対処できないこと,適切に使うのが難しくあまり利用されていないこと,Security Manager の存在により標準クラスライブラリのテストコストが大きく増大していることなどが理由です.

System.exit の禁止など,代替手段については検討中のようです.

JEP 415: コンテキスト固有のデシリアライズフィルタ

Java9から導入されていたシリアライズ復元時のフィルタと異なり,デシリアライズ操作ごとにフィルターを設定しやすくなったようです.


ここからは正式実装ではなく試験的な機能です.

JEP 406: switch パターンマッチング (Preview)

case でのパターン指定や case null の追加等が予定されています.

JEP 412: Foreign Function & Memory API (Incubator)

JNIを使わずに,Javaランタイム外部のコード・データとの相互運用を行うAPIの導入が予定されています.
以前からIncubatorだった Foreign-Memory Access API と Foreign Linker API を一つのJEPにまとめたようです.

JEP 414: Vector API (Second Incubator)

実行時に適切にコンパイルされるようベクトル演算を表現するAPIの導入が予定されています.


  1. 以前はリリース前から新バージョンの記事がたくさんあったのに,最近減ってきた気がする… 

  2. Java SE 1.2 より前と同じ挙動に戻ったらしいです. 

  3. Random, SecureRandom, SplittableRandom, ThreadLocalRandom 

1
2
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
1
2