radioc@?

レディオキャットハテナ

【勉強会メモ】JavaOne 2017 報告会 in 大阪

kanjava.connpass.com

日時:2017/10/28(土) 13:00 〜 18:00

場所:日本オラクル株式会社 関西支社

毎年サンフランシスコで開催されているJavaOneの報告会。実際に現地で参加してきた方々によるJavaの最新動向。タイミング的にJDK 9の話が中心だと思ってはいたが、リリースが延期される間に主要な機能については関ジャバでも既に取り上げていたこともあり1つ1つの詳しい解説は少なめ(Moduleぐらい)だった。

Javaエンジニアの関心事としては今後のリリースサイクルとOracleのサポート、技術的にはModuleどうすんねん?というあたりだろうか。今まで1,2年単位で新機能に追従していたのに、半年のサイクルに追従できるのかというのは少し不安ではある。従来のリリースモデルからの移行期間もそれほど猶予があるわけではないので、まずは影響の大きそうなModuleにどう対応するかが大きな課題になりそう。さらに半年単位で新たな機能も入ってくるので今後の動向にも注意が必要。

ポジティブな面ではコンテナ技術への対応は期待感があった。fn projetは簡単に試すことができるので触っておきたい。Persistent Memoryについても今後のサーバサイドJavaのあり方に影響を与えそうなので動向を見守りつつ抑えておきたい技術だ。

Graal/OpenJ9についてはちょっと理解が追いついておらず粗いメモになっている気もしますがご容赦ください。長丁場の勉強会の最後にこのテーマは正直しんどかった。。

www.oracle.com

JavaOne 2017 overview & announcements(伊藤 敬さん)

伊藤 敬さん(日本オラクル株式会社)

Java One 2017 Event Schedule

  • 9/30:子供向けイベント
  • 10/1:Community Day
  • 10/2〜5:Sessions, Hands on, BoF, Keynoteなど

Java Kyenote

  • Mark Cavage…Java SEとEEの開発トップ
    • 去年就任してから色々動きがあった
    • もともとAWSにいたりEaasの人
    • EEとSEをうまくまとめている
  • Georges Saab…EE
  • Mark Reinhold…SE

これからのJavaの方向性

  • Open
  • Evolving
  • Nimble…軽量化
  • Scalable

Java EE

  • 8がリリース
  • さらなるOpen化
  • 軽量性
  • Eclipseへの移行

Java SE

  • OpeJDK活用
  • リリースサイクルの高速化

Announcement New Release Model of JDK

従来のリリースモデル

  • JDK 9⇒過去最多の機能追加
  • 従来のリリースモデルは2年に一度を目標
  • 機能リリース
    • 実際は2年以上かかっている
      • SE8は9ヶ月遅れ
      • SE9は計画発表時で既に6ヶ月遅れ、最終的に1年7ヶ月遅れ
    • 1年間のサポート
  • 更新リリース(セキュリティパッチ)
    • Oracle製品は全部3ヶ月ごと(1月、4月、7月、10月)
  • 長期サポート
    • OcaleJDKは1年以降も長期サポート
  • OpenJDK

新しいリリースモデル(JDK9から開始)

  • 機能リリース⇒6ヶ月に一度のリリースに固定
    • リリースは固定、機能の開発が間に合わなければその機能が次のバージョンにずれる
    • バージョン表記は $YEAR.$MONTH (18.3, 18.9...)
    • OpenJDKのバイナリで配布(光景バージョンのリリースまでの6ヶ月の無償サポート)
    • OpenJDKのライセンスはGPLv2+"Classpath Exception"になる
      • OpenJDKに乗せてバイナリの再配布が可能
      • 乗せたモジュールのソースコード開示不要
  • OpenJDK
    • Oracle JDKとの技術的な差分がなくなる(2018年後半)
    • Oracleが有償で提供していたツール類も提供される
    • OpenJDKを一般に使ってもらえる状態に引き上げる
    • OcaleJDKは有償製品化…6ヶ月は無償期間。サインアップして使うような形式に変わる予定。
  • 更新リリース:3ヶ月ごと⇒サイクルは今まで通り
    • OpenJDK & OracleJDK
    • メンテナンスのみで機能更新は行わない
  • 長期サポート(LTS、有償)⇒18年9月から開始
    • Olacle JDKのみ
    • 3年ごとの機能リリースをサポート

ソースコードの管理モデル

  • 従来のモデル
  • 新しいモデル
    • JDK 9⇒18.3⇒18.9⇒19.3...
    • 18.9 LTS商用サポート(26年9月まで)
    • 21.9 LTS商用サポート(29年9月まで)

Java SE 18.3のスケジュール

  • 2017/12/14⇒Rampdown Phase One
  • 2018/1/11⇒All Tests Run
  • 2018/1/18⇒Rampdown Phase Two
  • 2018/2/22⇒Final Release Candidate
  • 2018/3/20⇒General Avilability

JDK 18.3

OpenJDKバイナリ・ダウンロード

公式アップデート終了スケジュール

  • SE 8⇒2018年9月…ここを目指してモジュール対応し18.9に向けて対応するのが現実的かも?
  • SE 9⇒2018年3月
  • SE 18.3⇒2018年9月

新しいリリースモデルに伴う変更

  • Java SE 8 から後継バージョンへの自動更新は行われない
  • Java SE 9 の32ビット版のバイナリ提供の予定は無い
  • Java Plug-inおよびJava Web Startのサポート期間はJava SE 8まで
    • 無償は18年3月まで、有償は19年3月まで
    • Java SE 18.3からはバンドルされない

Javaの商用サポート

SE 8⇒Premier:22/3、Extend:25/3 SE 8 Deployment Technology⇒Premier:19/3 SE 9 ⇒Premier:18/3、Extend:設定なし 18.3 ⇒Premier:18/9、Extend:設定なし 18.9 ⇒Premier:23/9、Extend:26/9

Oracle Java SE サポート・ロードマップ

Java SE 9 日本語ドキュメント公開済み

Java SE API & ドキュメント

Java EE 8

  • SE同様リリースサイクルが長い⇒Eclipseに移管
  • リライセンスという形をとる
  • glassfishソースコードを提供
  • Microprofileも取り込んでいく予定
    • 分裂しかけていた状態は改善

Java One 2018

2018年は10/28〜11/1予定

HeapStatsとProject Jigsaw

久保田 祐史さん

www.slideshare.net

Web+DB Press vol.101のJava9 のModuleの記事を執筆

WEB+DB PRESS Vol.101

WEB+DB PRESS Vol.101

HeapStats

HeapStats/jp - IcedTea

Project Jigsaw

  • JAR HELL⇒依存性が複雑怪奇
  • 標準ライブラリ⇒巨大かつ分割不可
  • 紛失したライブラリはどれ?
  • コンフリクトがどこで発生?⇒依存性を定義できないのが問題
  • 内部APIを安全に変更できる?⇒内部だけで使いたいけどPublicにしないといけない
  • PublicがPublic過ぎる

⇒解決策を測るのがProject Jigsaw

Module⇒パッケージが入っているコンテナのようなもの

module-info.java の定義

  • モジュールの依存関係
  • 公開するパッケージと公開先

標準ライブラリもモジュール化

モジュールの確認や使用

  • jdeps コマンドで依存性を確認可能
    • module-info.java の雛形を作成も可能⇒たくさんのパッケージに公開する時などに漏れがなくなる
  • jlink でライブラリ化

デモ

jigsaw-sample_jp

  • src/ 配下にModule
  • Moduleごとに従来の構成でパッケージを配置
    • Moduleもパッケージ同様ユニークな名前にする
  • どのモジュールのどのクラスを実行するかを指定して実行
  • jlink でライブラリ化
  • Javaが入っていない環境でも実行可能
    • 今後はコンテナで実行しやすくする

Q:モジュール名もユニークにするとあったがパッケージ名のようにドメインのような形になるのか?

A:YES 構成的にはパッケージ名の下にまたパッケージ名が入るイメージ

アンチパターン

  • classpathmodule(path) を同時に指定してはいけない
    • 実行はできるが、エラーがわけわからなくなる
  • モジュール化していないライブラリをmoduleパスで呼び出すことはできる
  • モジュール化するまではclasspathで指定するほうがおすすめ

3年目のJavaOneぐらい大目にみてよ

佐々木さん

JavaOne2017報告会

  • JavaOne2017で登場したライブラリやツールの紹介
  • JavaOne2015からJavaOne2017まで3回の参加で得た経験や感想について

Ten Simple Rules for Writing Great Test Cases

www.slideshare.net

  1. Think before you act⇒まずは考える
  2. Make your test understandable⇒テストはわかりやすいように
    • テストされるコードよりテストコードをわかりやすく
    • コメントをたくさん書く
    • 失敗時の理由が分かりやすいように
  3. Keep your test small and simple⇒テストは小さく単純に
  4. Test one thing only⇒テストは1つずつ
  5. Fast test only⇒テストの実行時間は短く
    • ユニットテストはなるべく頻繁に実行する
    • 結果がすぐわかるように
    • 遅いテストは頻繁に実行したくない
  6. Absolute repeatability⇒テストはいつも同じ結果になるように
  7. Independent test only ⇒テストは他のテストに依存しないように
    • どんな順番でテストを実行しても同じ結果になるように
    • 一部のテストのみを実行して素早くデバッグできるように
  8. Provide diagnostic data on failure⇒テスト失敗時の状況を出力する
  9. No hard-coding of your environment⇒環境をハードコートしない
    • ポート、IPアドレスデータファイル、DBなどをハードコートしない 10.No extraneous output⇒余計な情報は出力しない
    • 多すぎる情報は混乱する
    • 正常時はあまり出力しないようがいい

KISSの原則

  • Keep it simple, stupid
  • Keep it short and simple

⇒テストコードにかぎらずシンプルにしておくことは重要

Compiling Java to JavaScript How to Replace Applets Without the Plugin

Session Catalog | JavaOne 2017

Greenfoot

Javaでゲームのような画面でプログラミングする

TeaVM

teavm.org

  • JavaからJavascriptへのトランスパイラ
  • VMではない
  • マルチスレッドをサポート
  • Lambdaを含む全ての言語構造をサポート
  • 主要なJavaAPIクラスを実装
  • バイトコードからJavascriptに変換
  • JavaにかぎらずScalaやKotlinからも変換可能

トランスパイル

  • トランスパイルは完璧ではない
  • AppletをHTML5アプリに変換したいときに試してみてもいいかも

3年目のJavaOne

ホテルの予約

  • サンフランシスコは平均宿泊料金が世界一
    • JavaOne開催期間は値段が跳ね上がる
    • ホテルは早めに予約⇒ほぼ1年前

英語

  • ほとんどのセッションはスライドがある
  • 基本的な技術バックボーンがあれば理解しやすい
  • 日常生活のほうが大変
  • バーボンが通じない⇒銘柄を言っていくことでありつけた

2年目はU.S Citizensで入国審査できる

  • 到着した日の過ごし方で全てが決まる⇒野球を観て過ごす
  • 到着した日は晩まで寝ない
  • バーボンをリベンジ⇒1回の発音で通じた(ブーブン)
    • ダイキリが通じなかった⇒違うバーで翌日リベンジ成功(ダイキュリー)

3年目も晩まで寝ない

  • カリフォルニア科学アカデミーに行く
  • 戦争記念オペラハウスに行く(オペラのシーズンらしい)
  • Google Mapに周辺の食事のマップ
  • バーでアメリカ人と友達になる

JavaOneで感じたJavaの今とこれから

きしださん

Javaが変わった

  • Oracle JDK⇒OpenJDK
  • 6ヶ月サイクルのリリース
  • モジュールごとの機能追加
  • 無償だと6ヶ月のメンテナンス期間
  • Java EEEclipse

OpenJDK ライフサイクルおよびサポートポリシー - Red Hat Customer Portal

18.3にvarが入る

  • 言語仕様ですら6ヶ月でかわる
  • なにが変わるか事前に把握しづらい
  • なにが変わったか事後に把握しづらい
  • なにが動かせるか把握しづらい

d.hatena.ne.jp

fn project

www.publickey1.jp

fn projet は簡単に試せる

  • Dockerがやってくれる
  • brew install fn するだけ
  • Javaが入っていなくても大丈夫
  • rustとかgoとかrubyも対応

※メモ qiita.com

サーバレス

  • 要するにCGI
  • ゲートウエイだけが立っていてアプリケーションはその都度プロセスを動かす
  • サーバ管理の必要性が低い
  • スケールアップが容易
  • 多重化はしたいけど不可はそう高くないみたいなところにいいかも
  • 企業規模が多ければ案外多いのでは

Javaの欠点

  • プロセス起動が重い
  • 一度しか実行されないので実行時最適化が無駄

プロセス起動が重い

  • 読み込むクラスを減らす⇒モジュール化
  • 実行時の最適化が無駄⇒予め最適化⇒AOTやOpenJ9

色々変わるけどモジュール化が大事

  • プロジェクトごとにリリース可能
  • Dockerに対応しやすくなるのもモジュール化によって実現

JUnit5

  • 再設計した
  • だいぶ便利になった
    • Nestedが便利⇒見やすく書ける
    • メタアノテーション⇒tagを使って書きやすくなった
    • パラメタライズテスト⇒パラメータを変えたテストが書きやすくなった

d.hatena.ne.jp

Intel's Persistent Memory in Java Platform

きつねさん

IntelとOpenJDK

  • JIT,Core libの最適化
  • 最新HWへの対応
  • Project Panama
  • Enabling Java for Persistent Memory

www.publickey1.jp

Persistent Memory(PM)

  • Oracle Database 18c でPMサポート
  • OOW'17でアナウンス⇒5倍ぐらい早くなる

www.publickey1.jp

PM in Java

  • Volatile usage
    • 大容量量メモリ
  • Persistant usage
    • 高速ストレージ

2 kind of Volatile Usage

1 DAXでPM上の仮想アドレス空間に配置(全部PMに載せる)

  • 割り当て方を考えなくて良いので簡単
  • メモリアクセス速度<大容量メモリの場合に有効

例) - BigData - In-memory db

java実行時のオプションで指定できるようにする予定

2 一部をDRAMに乗せて残りをPM

  • ユーザーが割当を指定
  • プロファイリング結果をもとに自動で割り当てて最適化
    • ⇒実際に自動でやるにはまだ難しいので割当指定が現実的
  • -Xmp500g のようにオプション指定
  • 以降はPM使うというようなコードも書ける

Persistent(Storage) usage

Persistent Collections for Javaを使ったデモ

github.com

-ObjetDirectory - putでオブジェクトを永続化 - getでクラスを指定して取得 - 永続化しているので違うJVMでもgetで取得できる - Transaction - 永続化のトランザクション制御 - サンプルはRAMディスクを使ってエミュレートする

永続化可能なクラス定義

⇒永続化されているオブジェクトを取得後にオブジェクト内の値を変更すると永続化されたObjectDirectory上のオブジェクトの値も変わる

まとめ

  • IntelがめちゃくちゃJavaに力を入れている
  • メモリとして使うほうは早くJavaでも使えるかも
  • ストレージとして使うAPIはPanama待ち
    • APIは今でも試せる
    • RAMデスクでエミュレート
  • 対応するOSS DBが出て来るのはもう少し先かも

JVM関連の最近の出来事 Graal/OpenJ9

じゅくちょーさん

www.slideshare.net

Graal

Twitterが既に利用

  • すでに本番環境でGraal使っている
  • OpenJDK8ベースの独自JDKを使っている

Graal VM

JVM上で他の言語が動いている

  • Graal VM上の言語は相互に呼び出し可能

Truffle

オレオレ言語をTruffleで動かす⇒JJUG CCCで続きをやる予定

www.java-users.jp

Graal & Truffle

パフォーマンス

まとめ

jyukutyo.hatenablog.com

OpenJ9

JVMの実装

  • HotSpot VM
  • Eclipse OpenJ9
  • FJVM
  • 日立JavaVM
  • Zing

など

JavaエンジニアとしてはJVMの実装もアプリケーションに合わせて実装したい

OpenJ9

J9の特徴

などなど

OpenJ9はOMRを使用する

Eclipse OMR

OpenJ9ではクラスファイルを扱いやすくなっている

Conversion to ROM

  • J9がROMクラスに変換している
  • プラットフォームに合わせてROMクラスができる

From ROM to RAM

  • 書き込むときにはRAMに変換

クラス共有

  • JVMをまたいでROMクラスを共有
  • 起動が早い
  • フットプリントが小さい

J9のパフォーマンス

  • スタートが35%早くなる

など

Ahead-Of-Time(AOT)コンパイル

  • OpenJDK/OracleJDK9にexperimentalで含まれる
  • Linuxのみ
  • jaotc コマンド

Startup time

  • AOTを使うと早くなる

J9のツール

DDR(Direct Dump Reader)

  • J9用コアダンプ解析ツール
  • DDR Interactiveというフロントエンドもある

Open J9ではできなさそう

  • EclipseのAntでのビルド必須
  • IBMのライブラリが必要

DDRが提供すること

  • そのアドレスの構造を出力する
  • その他の情報を出力する
  • ユーティリティ
  • データ解析

GDB弱者にはやさしいかも

まとめ