それが僕には楽しかったんです。

僕と MySQL と時々 MariaDB

Oracle Code Japan Tour in Sapporoに行ってきた

f:id:RabbitFoot141:20170605193043p:plain

はじめに

Oracle Code Japan TourがSapporoにくるとのことで初めて情報系のイベントに参加してみた。
というわけで実際に得た情報をあれこれまとめてみた。

すごいメモのような感じになっているので間違ってたらコメントなどくれると嬉しい。

Feed Back from Java Day Tokyo 2017

Java + Dockerが現在利用できるようになっている。
javaだけでなくoracleの製品も利用できるようになった。

java ee8修正案としてhttp2の実装がありになったりリアクティブプログラミングができるようになったりしていくとのこと
非同期と同期を組み合わせて高速化を図る。

javaの最新情報は以下にある
builder.japan.zdnet.com


Raspberry Pi with Java 9

jlinkというコマンドの話
必要なモジュールなどのみでjreを作成できるコマンド
ラズパイみたいにリソースが限られている時に有効

java se9ではhttp2のあれこれが乗っかる。

se9ではarm v5とarm v6(raspberry pi a,b,b+,zero)には未対応
そこでjavaを使いたいなら8以下のものを使うひつようが出てくる。

javafxiphone,androidで使いたくなったらgluonが開発してるヤツを使える。
gluonhq.com


javaでラズパイのあれこれを動かすためのプロジェクトがあるためハードウェア制御などをjavaでも行うことができる。

ここではそのデモをみて大半が終わってしまった。
ただラズパイ上でjavaを動かすのも楽しそうだと思った。

Cloud Native Java EE

ここはjava ee使わんしネットワークとかあれこれやってないから普通に話聞いて面白いなぐらいしか感想がない。
ただdockerと組み合わせるのが面白かった。

あと
JOnsen – Java Unconference at a Japanese Onsen
っていうアンカンファレンスの話聞けてよかった。


Java SE 9のススメ

ここではjava9での互換性、新機能、改善点などについての話だった

互換性

java9で互換性がなくなったものがいくつかある

言語仕様とライブラリ

java se8ではアンダースコアを1文字変数名として使用できたが警告がでる状況だったが、se9からはアンダースコア1文字だけではコンパイルエラーとなる。

@deprecatedの付いているメソッドについて、今まではずっと残ってきたものでも本当になくなる可能性があるとのこと。
特にGUI関連のものや、OSに比較的依存したものがJigsawプロジェクトによりブラックオックス化される可能性が高いそう。

保守、運用

virtual VM,hprof,jhatなどなどのツールがno moreとなってしまう。

デフォルトのGCが現行のものだとParallel GCなところがG1GCに変更になる。
またそれ以前のCMSはdeprecatedになり今後のアップデートで消える可能性がある。

CMSとG1GCでは使えないのでゴリゴリチューニングしている人は注意が必要。

ただしメモリサイズが小さいマシンなどではparallel GCを使うのがよい。

新機能

今回は大きく分けて3つ

  • Project Jigsaw
  • JShell
  • Reactive Streams

が紹介された。

Project Jigsaw

背景:大規模システムになるとクラスパスが300個近くになることがあるが、実際バージョン違いだけだったりするのにこれはどうなのという問題
俗に言うjar hellに陥る問題。
ライブラリ更新で動作不良を起こしたり、publicがpublicすぎる問題などなど。

これらを辿って行くと依存性の欠如であったり、公開範囲を適切に設定できないなどなど。

これをモジュールにして解決しようというのがProject Jigsaw


モジュールに関して
現行のjarはほぼそのまま使える。
jarファイル中にメタ情報を付加する。
それらを管理するmodule-info.javaの有無が現行とse9のおおきな違い。

クラスパスが消えてモジュールパスに統一される可能性がある。


その他としてjava.baseにjava.langやjava.utilなどが統一されScalaっぽくimportしなくても使えるみたい

依存性の調査は

jdeps -s ファイル名.jar

でそのファイルが使ってるモジュールを表示してくれる。
それをもとにモジュールのあれこれを作成できるようになる。

JShell

javaのreplツール
jshellコマンドを打つと使用できるようになる。
ちなみに行末の;を省略してもいい
同じ変数名で別のデータ型の変数を宣言すると一番最後に変更したものに置換される。

Reactive Streams

非同期処理のためのインターフェース
http://www.reactice-streams.org
back pressureがあるタイプのPublish-Subscribeモデル。
subscriberがpublisherに要求するとsubscriptionが独自に生成されデータがどれだけ通過するか制限できるだか把握できるだか
ココらへんはあまり実感がわかなかった

改善

project coin
stream,collection

project coin

ダイヤモンド演算子などのあれこれに対するものだが
se8ではそれまでの問題がほとんど解決されたが匿名クラスでは使用できなかった。
それをse9では改善し、ほぼすべての場所でダイヤモンド演算子を使えるようになる。

Stream

ファクトリメソッドとして

  • ofNullable
  • iterate

が追加される。

そのほかのメソッドでは

  • take/dropWhile

^ Collectors.flatMapping

  • Collectors.filtering

が追加され関数型のあれこれが割と使えるようになる。

Optionalはstream,flatMapと併用を前提にした設計になる。
ifPresentOrElseが追加され、値がなかった時(Else)にどうするか記述できるようになる。
orの中にoptionalを書けるようになる。

ofメソッドも追加され

List<Integer> list = List.of(1,2,3)

と実装できる。
これはイミュータブルとして生成される。

その他

javadochtml5に対応。
検索窓が追加されるがデフォルトで検索窓にフォーカスがあてられるためスペースでしたにいけなくなった。

リリースは2017/09/21に変更になった。
JDK 9 Early-Access Builds
ここで最新情報をあされる。

追記(2017/06/04)

このセッションを担当してくださった桜庭さんの方から資料がアップされたのでここにも掲示。

www.slideshare.net


まとめ

初めての情報系勉強会参加だったけどかなり面白かった。
普段Scalaしか書かないけどJavaのあれこれも面白そうだと感じた