せてぃーずノート

Javaのイベント参加レポートとかを書いたりします。

JJUG ナイトセミナー 「Java SE 10 / JDK10リリース特集」に行ってきた

花粉症つらい・・・

お知らせ

JavaDayTokyo2018

5/17(木)に決定。
キーノートはMark Reinhold(初来日?)
登録サイトは近日オープン(多分、今週後半くらいとのこと)

JJUG CCC 2018 CfP募集中

JJUG CCC 2018 Spring

JDKリリースモデル変更について(おさらい) by 伊藤 敬さん(Oracle)

Java 10はおそらく初めて予定通りリリースされたJava
リリースノートには削除予定APIも記載されているので確認しておくこと。

JDK10の追加機能解説 - JEP286/ローカル変数の型省略(var記法)を中心に

ローカル変数の型推論

冗長な変数の型の宣言をvarに置き換えられる。
動的言語になるわけじゃない。
メソッドの引数・戻り値には使えない。
また、匿名クラスにも使えない。

varは予約語ではないキーワード。
そのかわり、クラスやインターフェースでは使えなくなった。
(非互換だけど、流石に使ってる人いないよね・・・)

変数やフィールド、メソッドでは使えるからこれはOK。(絶対やるなよ的な・・・)

var var = var();

varの使いどころは、読みやすさが向上する箇所。
Javaの書きやすさより読みやすさを重視している文化は破っちゃダメ。
型をタイプするのが面倒とかそんな理由で使ってはダメ。

IDEがなくても理解できる状態で使うべき。
マウスポインタを上に乗っければわかるはNG。

varのガイドラインも出ている。

orablogs-jp.blogspot.jp

GCの変更

G1のパラレルFullGCが追加された。
でも、G1GCを使っている時にFull GCを起こした時点で負けなので、恩恵を受けないような運用が理想。

Garbage-Collector Interfaceの追加で、GCをモジュールとして追加削除できるようになる。

ZGC

https://wiki.openjdk.java.net/display/zgc/Main

4TB(!)までのヒープに対応。
ヒープサイズに関わりなく、Stop The Worldを10ms以下に抑えるのがゴール。

Java 10でぼくたちの生活は どうかわるの?

今まではすぐにでも欲しい便利な機能でも、追加されるのが3年後だった。
それが比較的すぐに手に入る。
でも、アップデートに追従するコストが大変。

新しいバージョンへの対応方法
  1. とりあえず動かして見る
  2. コンパイルして動かして見る
  3. 非互換・非推奨APIを見つけ出す(jdeps、jdeprscan)
  4. 機能テストを行う

新しいバージョンの変更箇所は、以下の

  • JEPから新機能
  • 最新のJRSからAPIの変更点
  • リリースノートから非互換

STSで非推奨化・削除と続くと、LTSから次のLTSにいきなり移った時に、サイレント削除が発生する可能性がある

Java 8からJava 9への移行がとにかく大変。
そこを乗り切ること。

Class-Data Sharing

元々はコマーシャル機能。
クラスデータを複数のプロセスで共有する。
バッチとかのプロセスをたくさん起動するアプリで利用できる
読み込むクラスの量が多いほど効果的

APIの変更

OptionalにorElseThrowが追加。
getよりこちらを利用すべきと書かれている。

List、Set、MapにcopyOfメソッドが追加。
変更不可のコピーを返却する。
引数が変更不可の場合は引数をそのまま返す。

プロセスIDが取れるようになった。

Javadocにサマリーを出力するアノテーションと、ヘッダーとフッターの編集が追加。
会社で使うときとか便利そう。

感想

Java 9から半年だけど、機能追加が非常に多い印象。
Java 8からJava 11に移行すると死ねる未来が見えるので、それまでのどこかでは試しておかないといけないなぁ・・・。

あとはJavaとは関係ないですけど、神宮球場の桜がいい感じに綺麗でした