mike-neckのブログ

Java or Groovy or Swift or Golang

Java Day Tokyo 2017 参加メモ

Java Day Tokyo 2017に数年ぶりに参加しました。そのメモです。僕が参加したのは次のセッションです。

  • 基調講演
  • Java 9 and Beyond: Java Renaissance in the Cloud
  • Modular Development with JDK 9
  • Tuning G1GC
  • Java SE 9のすすめ
  • 緊急開催!Java技術メモ三銃士が語るエンジニア道
  • スペシャルパネルセッション - 海外Javaコミュニティ・エンジニアは今どんな活動をしているのか?

基調講演

Javaの現状と今後についてのポジショントーク。Java9/10についていろいろと情報がありましたが特に目新しい情報はありませんでした。目新しい情報がないということはJigsawがRejectされたことについても特に言及なしでした。Java9は7月にリリースできるのでしょうか…???

まあ、僕のような平凡なエンジニアができるのは

というところでしょう。これは別にJEPの実装をやれというわけではなく、early accessJDKを触ってフィードバックするなどでよいということです。

Java EE8 は7月にリリースされるということでしたが…


Java 9 and Beyond: Java Renaissance in the Cloud

Java9の概要とOracleが提供するツール類、Java10以降の説明。ざっと説明された内容は以下の通り。

  • Jigsaw
  • jlinker
    • カスタムランタイムや実行バイナリを作るツール
  • AOTコンパイラ
  • GC
    • G1GCがデフォルトになる
  • オラクルの提供するツール類
    • Flight Recorder/Mission Control/Advanced Management Console
  • Varhara
    • メモリ効率の向上
  • Panama

Modular Development with JDK 9

Jigsawについての説明。前から疑問に思ってたことが解決できた。

前からの疑問:既存のjarに対してどうやってモジュールに組み込んでいくか?

  • オートマティックモジュールという仕組みを利用して組み込む
    • jarの名前をそのままモジュール名に変換する(例: spring-boot-starter-web なら spring.boot.starter.web モジュール)
    • jarファイルをモジュールのあるディレクトリーに配置して -m オプションで指定する

なお、移行に関してもアドバイスが有りました。

  • jdk.unsupported にあるクラス(例えば sun.misc.Unsafe など)についてはモジュールで使う宣言をすれば利用できる
  • JDK内部のクラスを利用しているもの (sun.misc.Base64Encoder を利用しているなど) はもれなくアプリケーションが動かなくなるので、代替のクラスを利用すること
  • ClassLoader を使ってクラスの読み込みをカスタマイズしているものについても壊れる可能性があるので早めに対策すること
  • rt.jar などのJDKのjarの名前、パスに依存しているアプリケーションも死ぬ

Tuning G1GC

あまりにGCのことがわかってなくて、ちょっと理解できませんでした。実際英語もよく聞き取れなかったし、通訳さんもつらそうでした。また説明の途中で時間切れになって終わりました…

Java SE 9のすすめ

またもやJava9の話。もっとJava EEの話を聞くとかすればよかったかなとも思ってる。

  • Breaking Changes
    • _ が変数名としては使えなくなる
    • LogManager#addPropertyChangeListener などの一部のメソッドが使えなくなる
    • win-x86のclientがなくなる
    • Java DBが同梱されなくなる(Derbyが欲しければjarを落としてくる必要がある)
    • hprof/jhatがなくなる
    • JREの構造が変わるので rt.jar のパスに依存しているともれなく壊れる
    • 起動オプション -Xbootclasspath がなくなってクラスを差し替えて…(非推奨)
  • 新しい機能など
    • java.util.concurrent.Flow のインターフェース(リアクティブストリーム用)
    • jdk.incubator モジュールのhttp/2クライアント
  • コンパイラーの改善
    • tey-with-resourceの改善(下記1参照)
    • 匿名クラスのインスタンス生成時に型パラメーターをダイヤモンドで省略可能になる(下記2参照)
// 1. try-with-resource
// 従来
final Reader reader = ...
try (final Reader anotherVariable = reader) {
  // do something
}
// Java9 or later
final Reader reader = ...
try (reader) {
  // do something
}

// 2. anonymous class
// 従来
final Function<String, Integer> length = new Function<String, Integer>() {
  // ...
}
// Java9 or later
final Function<String, Integer> length = new Function<>() {
  // ...
}
  • APIの改善
    • Stream#ofNullable(x) / Stream#iterate(seed,hasNext,next)
    • Collectors#flatMapping / Collectors#filtering
    • Optional#stream - OptionalFoldable っぽくなる / Optional#or - Optional の合成 / Optional#ifPresentOrElse 男らしいメソッド…
    • List#of / Set#of / Map#of それぞれのスタティックファクトリーメソッド(やっと今頃)
    • Enumeration#asIterator - 生サーブレットを触っている人にはおなじみの Enumeration にやっと(10年ごしくらい) Iterator にできるメソッドが追加

緊急開催!Java技術メモ三銃士が語るエンジニア道

Q なぜメモを取り始めたか?

みな、誰かに読まれることというよりは自分のためにメモを取るという感じですね。

Q やっててよかったこと/やらなければよかったこと

書き続けることでセルフブランドが向上するということですね。

Q メモを続けるコツ

全員共通しているのは無理をしないということでした。

Q 技術情報の調べ方

ひしだまさん以外は基本的には公式のドキュメントにあたることが多いようです。ひしだまさんは使える・動くを主軸に考えて調べているようです。

質問コーナー

これは多分、質問の意図が理解できてなかったっぽい…

スペシャルパネルセッション - 海外Javaコミュニティ・エンジニアは今どんな活動をしているのか?

疲れてて、実はあまり覚えてない…

という感じでJava9をかなり多めに聞いてきましたが、この内容を元に今後も考えていきたいです。