Skip to content

Instantly share code, notes, and snippets.

@ykubota
Last active May 8, 2021 14:22
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ykubota/31b65b06aad950be32f80c619dc2e783 to your computer and use it in GitHub Desktop.
Save ykubota/31b65b06aad950be32f80c619dc2e783 to your computer and use it in GitHub Desktop.
Java 12: 利用や動作に影響を与える変更点

Java 12: 利用や動作に影響を与える変更点

Java 10はこちら Java 11はこちら

なお、本資料に記載しているものの一部は実機確認してないので、お使いのコードを修正する前に動作確認してください :) 特に Java 12 は現時点ではリリースされてないので変わる可能性があります

はじめに

本資料はCompatibility & Specification Reviewを整理したものです

新しいバージョンがリリースされた時に注目すべきポイントはいくつかあり、よく注目される新機能は JEP として管理されてるのでこれを確認するのがよい。これ以外に JSR で公開されている Specification では新機能レベルではない細かい新規追加 API や削除・非推奨化された API が記載されている

この他に「既存APIの利用や既存アプリの動作に影響を与えるかどうか」という観点があり、ソフトウェア開発コミュニティや企業の「互換性の保守」が求められる団体では最も重要である。これはリリースノートで確認できるが、本資料ではもう少し突っ込んで仕様変更を伴う際に行われるレビューCSR(Compatibility & Specification Review)Issue Trackerソースコード+構成管理情報から調査し、ユーザが影響を受ける可能性がある変更内容を整理した

ランタイム関係

GC関係

  • JDK-8202286: Allocation of old generation of Java heap on alternate memory devices
    • 試験機能としてG1 / Parallel GC利用時にOld領域のヒープをNV-DIMMに割り当てることが可能になった
    • -XX:AllocatedOldGenAt=<path>でnv-dimmファイルシステムのパスを指定すると有効になる。Memory-mapped fileが作られる
    • 注意点
      • 試験機能
      • 現実装ではXmxサイズだけnv-dimmファイルシステムにてプリアロケートするため、nv-dimm領域に十分なスペースを用意する必要がある
      • Young領域はDRAM。また-Xmxで指定した値がdramの値以上の場合、以下の順でYoung領域の最大値が決まる
        • MaxNewSize or -Xmn が設定されていない: dram or -XX:MaxRAM の -XX:MaxRAMPercentage(デフォルト80%)
        • MaxNewSize or -Xmn が設定されている: 設定した値またはdram or -XX:MaxRAM の -XX:MaxRAMPercentage のうち低い値
        • Young領域のサイズは gc+ergo=info のロギングで出力される
  • JDK-6490394: G1: Allow heap shrinking / memory unmapping after reclaiming regions during Remark
    • G1 の concurrent mark cycle 時に最大で最小ヒープサイズまで不要なメモリを返すようになった。
    • 基本的にJVMは一度掴んだメモリはOSに返さないため、それに合わせてXmxを低くせざるを得なかったケースに向いている。

API関係

java.util

java.text

java.lang

java.net

java.io

java.time

クライアント関係

java.awt

その他

ツール関係

  • JDK-8213909: jdeps --print-module-deps should report missing dependences
    • jdepsツールのオプション(--print-module-deps, --list-deps, --list-reduce-deps)が強化された
    • モジュールが必要としているクラス間の依存関係だったが間接・非直接的依存(transitively)も含めて調査するようになった。
      • --no-recursiveオプションを付けることで、従来通り直接依存しているクラスのみ調査する
    • --ignore-missing-depsオプションを付けることで依存クラスがなくてもエラーとならずに調査を続行する
      • これを付けてカスタムイメージを作ることもできるが(依存クラスがなければ)当然起動しないので注意

セキュリティ関係

コア

SSL

暗号化

  • JDK-8213363: X25519 private key PKCS#8 encoding/decoding is incorrect
    • RFC 8410で定義されていたX25519とX448プライベートキーのエンコードフォーマットが誤っていたのが修正された
    • 以前まで利用できてた誤ったフォーマットに則ったこれらのプライベートキーは作り直しましょう

その他

ルート証明書関係

@objectx
Copy link

objectx commented Mar 17, 2019

アルゴリズムを正確に一位にするため

一意

@ykubota
Copy link
Author

ykubota commented Mar 25, 2019

Oh, thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment