Skip to content

Instantly share code, notes, and snippets.

@ykubota
Last active June 24, 2021 00:44
Show Gist options
  • Select an option

  • Save ykubota/b37a62de579dc92d02c9483974160c67 to your computer and use it in GitHub Desktop.

Select an option

Save ykubota/b37a62de579dc92d02c9483974160c67 to your computer and use it in GitHub Desktop.
Java 11による変更点。

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

Java 10はこちら

なお、本資料に記載しているものの一部は実機確認してないので、お使いのコードを修正する前に動作確認してください :)

はじめに

新しいバージョンがリリースされた時に注目すべきポイントはいくつか考えられる。よく注目される新機能は JEP として管理されるのでこれを確認するのがよい。これ以外に JSR で公開されている Specification は主に新機能レベルではない細かい新規追加 API や削除・非推奨化された API が記載されている。前者については色々なメディアや記事で取り上げられ、後者についてはblog記事などで取り上げられていることが多い。

これらでは含まれていないポイントとして、APIの利用や動作に影響を与える変更点がある。企業、特に SIer などの「守り」が重要な企業では最も重要な項目である。これはいわゆる互換性を破壊するものであり、本資料はこれを列挙・整理している。

API

Add

  • JDK-8203394: Implementation of JEP 331: Low-Overhead Heap Profiling
    • JEP 331: Low-Overhead Heap ProfilingによりJavaヒープアロケート状況をサンプリングするJVMTI APIが追加された。ツールではないので注意
    • 純粋な追加なのでソースレベルの影響はないのだが、使うとパフォーマンスに少なからず影響が発生する。使わなければ当然その影響もない
  • JDK-8060192: Add default method <A> A[] Collection.toArray(IntFunction<A[]> generator)
    • java.util.Collectionインターフェースに新しいデフォルトメソッド toArray(IntFunction)が追加された。これは既存メソッドtoArray(T[])のオーバーロードである
    • インターフェースの変更なので影響(ソースの非互換性)が発生する。バイナリの非互換性は発生しない
    • 例えば list.toArray(null)のようなコードは、今まではtoArray(T[])メソッドと解決していたのが、toArray(IntFunction)とも一致してしまうため解決ができずコンパイル時にエラーが発生する
      • 以前のバージョンでコンパイル済みの場合はtoArray(T[])にリンクされてるので問題は生じない=バイナリの非互換性は発生しない
  • JDK-8202088: Japanese new era implementation
    • 平成の次の元号が出力するための前準備
    • java.time.chrono.JapaneseEra.of(3).getDisplayName(java.time.format.TextStyle.FULL, Locale.JAPAN) ==> "元号"
    • 今は元号が確定していないので数字(3)で指定が必要
    • 今は"元号" (Locale.JAPAN) や "NewEra" (Locale.US) が出力される。判明後アップデート予定
      • しかし政府が1ヵ月しか余裕を持たせなかったのでほぼ確実に間に合わない

Remove

Change

Deprecate

Tool

Add

Remove

Change

Option

Remove

Change

  • JDK-8066709: Make some JDK system properties read only
    • 以下のプロパティは起動時にキャッシュされ変更不可となった
    • java.home, user.home, user.dir, user.name
    • System::setPropertyで変更しても標準API(java.base)の動作は影響を受けない

Behavior

Add

Change

Security

Others

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