Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Java 10の変更点(JEP観点)非互換性観点は別記。

JEP レベルでの Java 10 新機能・変更点

http://openjdk.java.net/projects/jdk/10/

JEPの番号順。非互換性観点だとまだまだあるがそれは別に記載。

286: Local-Variable Type Inference

var。型推論ローカル変数 var の導入。 開発者にとって一番大きい・便利な変更はこれ。

296: Consolidate the JDK Forest into a Single Repository

これまで複数のコンポーネントごとに分けられていた OpenJDK リポジトリを一本化。

304: Garbage-Collector Interface

HotSpot内部のGC実装のインターフェース作成。 今後ビルド時などに簡単にGC実装を導入したり外しやすくするための取組み。 現時点ではShenandoah、ZGC、Epsilonが追加される見込みで、特にEpsilonはJava 11で導入確定路線。

307: Parallel Full GC for G1

G1 GCのFull GCをParallel化。(mixed gc や major gcのことではない) 運用者によっては大きい変更だが、そもそもFull GCはお目にかかりたくないですね。

310: Application Class-Data Sharing

JVM プロセス間でメタデータやクラス情報(Metaspace領域やinternされたString)を共有する仕組。 Oracle JDKの商用機能のOpenJDKマージ第一弾。 Microservices 周りで有用になるかもしれない。

Resouce Management(メモリやスレッドプールのプロセス間での共有・融通)はJava 11の予定。

やってみたレベルの記事はQiitaに投稿済み

312: Thread-Local Handshakes

アプリケーションスレッド上でコールバックを実行できるようにする(限定的にsafepointに入れるようにする、 スレッド単位でのsafepointポーリングができるようにする)。これまでSTW(アプリケーションスレッド全てを停止する) 必要があったが、個々のスレッドを停止することで実行できるように改善を行うもの。 これによって

  • BiasedLock の改善(影響が当該スレッドのみに限定される)
  • スタックトレース取得の影響軽減
  • スタックトレースのサンプリング改善(全スレッド停止に必要だったシグナル依存を削減することによる改善)
  • メモリバリアの削減 の準備(と一部実施)が見込まれている。

利用者的にはバイアスロックの影響が微軽減するところが多少嬉しいポイントになるかもしれない。

313: Remove the Native-Header Generation Tool (javah)

javah が削除された。 残してても良さそうだが Java 8 からjavac -h で代用可能なので問題ない。https://bugs.openjdk.java.net/browse/JDK-7150368

314: Additional Unicode Language-Tag Extensions

ゆにこーどらんげーじたぐ。 java.util.Locale が強化される。国際化を真面目に取り組んでいるところにとってはここが一番大きい恩恵かも?

316: Heap Allocation on Alternative Memory Devices

NV-DIMMにもJavaヒープが乗る時代が来た。 Intelさん的にはIntel's 3D XPoint memoryをカバーしてlibpmem等を経由せずにI/Oを高速化したい目論見もあるのだろう。いいぞもっとやれ。

ちなみにApache MnemonicというNV-DIMMにアロケートされたヒープ状況に関するヒントを GCに与えることでオーバヘッドを削減して高速化を行うライブラリなんてのもあったのです。

317: Experimental Java-Based JIT Compiler

Graaaaaaaaaaaaaaaaal。Project Metropolisの先鋒ですね。 JIT by Java。 将来的に利用者的に一番大きいのはこれだと思うがまだExperimentalなので、もうちょい先の話。

AoTと組合せてServerlessに特化した起動・実行高速化が図れるかも知れません、わからんけど。

David Back-sanかkanjavaのJVMになりたい人に話してもらうのが良さそう。

319: Root Certificates

ルート証明書。

322: Time-Based Release Versioning

またバージョン体系・表示が変わる。先頭の文字で判断している場合はほぼほぼ影響なし、かな? しれっと"LTS"を表示させてるけど、OpenJDKのLTSどうするんでしょうね。

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