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月にリリースできるのでしょうか…???
まあ、僕のような平凡なエンジニアができるのは
open JDKに参加してほしいという話
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
というところでしょう。これは別にJEPの実装をやれというわけではなく、early access のJDKを触ってフィードバックするなどでよいということです。
Java EE8 は7月にリリースされるということでしたが…
全然安心できないことはわかった pic.twitter.com/8tawPuI8r3
— irof(); (@irof) 2017年5月17日
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
オプションで指定する
- jarの名前をそのままモジュール名に変換する(例:
なお、移行に関してもアドバイスが有りました。
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
- 新しい機能など
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
-Optional
がFoldable
っぽくなる /Optional#or
-Optional
の合成 /Optional#ifPresentOrElse
男らしいメソッド…List#of
/Set#of
/Map#of
それぞれのスタティックファクトリーメソッド(やっと今頃)Enumeration#asIterator
- 生サーブレットを触っている人にはおなじみのEnumeration
にやっと(10年ごしくらい)Iterator
にできるメソッドが追加
緊急開催!Java技術メモ三銃士が語るエンジニア道
Q なぜメモを取り始めたか?
opengl_8080 勉強したことを忘れてしまったことがあったので、メモを取るようにした。本に書いてあることと自分が理解したことの差がわかるようにメモを書き始めた。#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
ヒーロー「勉強しないとエンジニアとしてはおしまいかと思ってる」#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
本とかドキュメントに書かれてることを試しただけでは勉強にならなくて、自分で理解できたことを書いていくことにした#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
ひしだま「メモを取り始めたのは人に言われたから」#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
ひしだま「makeの書き方とかわからなくてドキュメントを聞いたら、ないから作れとも」#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
ひしだま「会社から書くのはあれなのだが、家から書くのは構わないので、書いておいて、会社から参照できるようにしておいた」#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
みな、誰かに読まれることというよりは自分のためにメモを取るという感じですね。
Q やっててよかったこと/やらなければよかったこと
ひしだま
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
やってよかった:転職できた
ムカついたこと:WebLogicのバージョンアップのための資料を公開してたら、秘密情報公開しただろと怒られたことがある#Java三銃士
opengl_8080
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
やってよかった:英語読むようになった。勉強会で声かけてもらえるようになった。
やらなくてもよかった:使うことのないライブラリーを調べて時間を無駄にしたことがある#Java三銃士
ヒーロー
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
やってよかった:ヒーローになれた。
失敗したこと:Scalaで書いてたりするので、コードが読めないと言われることがある。#Java三銃士
書き続けることでセルフブランドが向上するということですね。
Q メモを続けるコツ
ヒーロー
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
月に一度は更新する、ツイッターで情報収集、自分の手に余ったら深追いしない#Java三銃士
わからなかったらわからないと書く#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
opengl_8080
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
1日1コミット
理解したことをすぐ文章にする#Java三銃士
ひしだま「ぼく、一日一回何かやるというのないです。ただ興味があればすごい頻度で更新する」#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
全員共通しているのは無理をしないということでした。
Q 技術情報の調べ方
ヒーロー
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
まず概要を探った後に、公式のドキュメントやチュートリアルをやる。その後、目次から機能を把握して、面白そうな機能を深く掘って、ソースも読む。#Java三銃士
opengl_8080
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
公式のドキュメントを読んで、直近で使う機能を調べて、とにかくシンプルなサンプルを書いた後にハローワールドプラスをやる#Java三銃士
ひしだま
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
まずググる(複数のサイト)。実は公式サイトは見てない(最終的には読む)。自分で書いてみて納得する。#Java三銃士
ひしだま「手を動かさないとわからない。モッなどさっぱりわからない」#Java三銃士
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
ひしだまさん以外は基本的には公式のドキュメントにあたることが多いようです。ひしだまさんは使える・動くを主軸に考えて調べているようです。
質問コーナー
ジャッバチャンピオンが質問「ちょっと理解が違ってた場合どうしてる?」
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
ひしだま「ブログでなくホームページなので更新してる」
opengl_8080「バージョンアップなどは放置してる」
ヒーロー「バージョンアップは別の記事。過去のも残したい。」#Java三銃士
これは多分、質問の意図が理解できてなかったっぽい…
エントリーにかかる時間
— Shinya Mochida@型 (@mike_neck) 2017年5月17日
opengl_8080「短いのは1日、Springの記事は5ヶ月かかってる」
ひしだま「2〜3時間」
ヒーロー「書くのに2〜3時間、準備は3〜4時間」#Java三銃士
スペシャルパネルセッション - 海外Javaコミュニティ・エンジニアは今どんな活動をしているのか?
疲れてて、実はあまり覚えてない…
という感じでJava9をかなり多めに聞いてきましたが、この内容を元に今後も考えていきたいです。