ミズノブログ

ミズノです。プログラミング・子育て・経年変化するもの など好きなことを雑多に書きます。

【勉強会メモ】Java Day Tokyo 2017

Java Day Tokyo 2017に参加してきたのでその時のメモ。
今回はJavaSE9について重点的に聞いてきました。

自分用に書いていたので歯抜けが多く申し訳ないです。
間違いや補足事項あればご指摘いただけると幸いです。

Java Day Tokyo 2017 とは

日本オラクルが開催する、国内最大規模のJava年次イベント。
公式ページ:http://www.oracle.co.jp/events/javaday/2017/ ハッシュタグ: #JavaDayTokyo

参加したセッション

※敬称略

  1. 基調講演 (日本オラクル代表執行役社長 杉原博茂、Oracle Vice President Bernard Traversat、Oracle Senior Director Will Lions)
  2. Java 9 and Beyond: Java Renaissance in the Cloud(Oracle Vice President Bernard Traversat)
  3. Modular Development with JDK日本オラクル株式会社 デイビッド・バック)
  4. Servlet 4.0 で始めるHTTP/2(日本オラクル株式会社 柳原 伸弥)
  5. Java SE 9のすすめ (Java in the Box 櫻庭 祐一)
  6. Spring Framework 5.0によるReactive Web Application (Pivotalジャパン株式会社 槙 俊明) 発表資料:https://www.slideshare.net/makingx/spring-framework-50-reactive-web-application-javadaytokyo

トピック&まとめ

Javaの現状、今後の動向について

  • Java SE 9, Java EE 8がリリースされる
  • Claud上で最適化するための機能強化

◆今年7月にリリース予定のJava SE 9, Java EE 8について

  • Java SE 9については後述。Java EE 8についてはあまり聞けなかったため言及しない。

Java SE 9 で導入される、module(Project jigsaw)とその他の新機能について

  • Module System(Project jigsaw):最も注目されている機能。依存性をモジュール単位で設定可能とする。
  • JShell:PythonRubyのREPLのように、インタラクティブにコードを実行する機能。
  • JLink:JDKのクラスモジュールのうち必要なものだけ指定して読み込むことができる機能。
  • Ahead of Time Compilation(AOT):仮想マシンの起動前にJavaクラスをネイティブコードにコンパイルする機能。起動時の時間短縮。
  • G1GC:デフォルトのGCが、パラレルGCからG1GCに変更された。

Java SE 9 で発生した仕様変更について

Servlet 4.0 で対応するHTTP/2について

  • HTTP/2を利用することで、クライアントとのHTTP通信が高速化可能に。Servlet 4.0 を素で使うのはあまり実現的でないので、フレームワーク側に対応動向をチェックしておく。

Spring Framework 5.0のReactiveプログラミング対応

  • Spring Framework 5.0より、Reactiveプログラミング対応としてSpring WebFluxという新しいWebフレームワークが追加された。
  • Reactiveプログラミングを行うと、Non-Blockingなデータ通信により高速化、柔軟なスケーラリビティが期待できる。
  • RxJava, Reactor, Akka などのライブラリが有名どころ。JavaSE9ではFlowインターフェースによるReactiveプログラミング対応が行われている。

以下、各セッションのメモ

Java Day Tokyo 2017 基調講演 (日本オラクル代表執行役社長 杉原博茂、Oracle Vice President Bernard Traversat、Oracle Senior Director Will Lions)

概要(公式ページより)

いよいよJava SE 9とJava EE 8のリリースが近づいてきました!今回のJava Day Tokyoの基調講演は、Java SE、Java EEそれぞれの開発部門のVice Presidentが、直接みなさまへ新バージョンの価値をご紹介します。新バージョンの注目すべきポイント、さらにその先に何があるのかを、ぜひみなさまご自身でお確かめください。ご参加をお待ちしています。

日本オラクル代表取締役 杉原博茂 氏

  • 「日本を幸せにするカンパニーへ」
  • ITの人材不足が課題、2030年には60万人の不足に
  • オンプレ(12兆) > IaaS(2100億)
  • Cloud上で最適化するための機能強化

Oracle Vice President Bernard Traversat 氏

  • Cloudの基盤となる
    • AWS,MS AzuleなどのコアにJavaが使われている
  • Java is deadはOracleに買収されて払拭された
  • 先日、Dockerとのパートナーシップを発表した

Java9

  • 122のフィーチャーが入った
    • module system
    • modular JDK
    • JShell
    • Encapsulate Internal APIs
    • JLink: Java Linker
    • Ahead of time compilation(AOT)
      • Java9ではスタティックのコンパイレーションを利用可能
      • コンパイラがリアリタイム情報を取得可能に

Java9以降の動向(OpenJDK)

project Valhalla
  • ValueTypes
  • Specialized Generics
  • Var Handles
Project Panama

ビッグデータへの適用 GPUでの実行

  • Foreign Function Inteerface
  • Date Layout Control
  • Arrays 2.0

MazdaでのJavaの利用について

従来型

  • ビジネスプロセスをサポート
  • 機能要件・非機能要件をサポートするのは必須
  • 全ての開発者は共通の開発環境、アーキテクチャ、開発ルール、FWを使っている
  • 自動生成ツールを作成
  • 言語が長生きしてくれるのも重要
  • 下位互換性(バージョンアップしやすい)

最近の流れ

  • 組み合わせ
    • Strategy Pattern →関数型に
  • 期待
    • 開発環境やFWの共通化→肥大化→Jigsawに期待
    • 大量データ→GCの問題→BigData/AI時代のJavaに期待

JShell

  • REPLのようにインタラクティブに実行可能となる
  • mvn jshell compile
  • 補完機能もついている
  • プロトタイプをJShellで作成し、形ができてきたらコードに落とし込む

Oracle Senior Director Will Lions 氏

  • JavaEE8は早ければ今年の夏に発表予定
  • HTTP/2は速度が速くセキュア、アプリケーションに変更必要なし

JJUG

  • 現在6300人以上、コアは20-30代
  • なぜコミュニティに参加するのか
    • 一緒に考えてくれる仲間に出会える
    • すごいエンジニアを知ることが出来る
    • 発信して勉強できる

Java 9 and Beyond: Java Renaissance in the Cloud

概要(公式ページより)

本セッションはJava 9リリースのアップデート情報をお届けします。Java 9は、エンジニアがjavaサービスをクラウド上にjavaサービスを開発し展開する方法を根本的に変えます。新たなツールであるAOTやJLinkはJava 9の新モジュールシステムを活用して新しいタイプのパフォーマンスと密度の最適化を可能にします。Java 9でデフォルトGCに位置づけられたG1はビッグデータクラウドサービス向けの新たなレベルのスケーラビリティを提供します。さらに、value typeやJNIの移行、言語の改良など、Java 9以降の新機能についても触れたいと思います。またこのセッションでは、これら新機能のデモを通してクラウドベースの開発者にとってのJava 9の重要性を理解頂きます。

Java9

  • Javaの問題
    • 冗長性
    • メモリを食う
  • Javaの優先度
    • セキュリティ

新機能

  • jigsaw
  • JLink
  • Ahead of Time(AOT) Java Compiler
  • JShell
  • G1 GC as the Default

Java SE Advanced

  • Flight Recorder Performance
    • 条件に基づいた情報をトレーシングすることが可能
  • Java Mission Control Console
    • 問題箇所を調査することが出来る
  • Advanced Management Console
    • 特定のアプリだけ古いJavaを利用、などを設定できる(セキュリティの向上)

Java9以降の動向

  • Uniform
    • Array, Values, types
  • memory
    • なるべくコンパクトに、もっとライトウェイトなスレッド
  • Compatible
    • 互換性
  • Performance

Modular Development with JDK 9 (日本オラクル株式会社 デイビッド・バック)

概要(公式ページより)

モジュラー開発スタイルは全てのJava開発者(あなたのアプリケーションがたった1つのJARであっても100個のJARであっても)にメリットがあります。本セッションでは内部APIを強力に保護しながら数十の再利用可能なモジュールとしてJDKを構造化したJava 9のモジュールシステムを紹介します。 そして、セッションではモジュールをどのようにして作成するか、一般的に利用されているライブラリ潜むJDKの内部APIへの依存の回避をどのように行うかについて解説します。最後に、モジュールのために用意されたツール群について説明します。

Programs are Classes Package Mogules

  • “public” no longer mean “accessile ti everyone”. 新規ドキュメント 2017-05-17 14.13.09_1.jpg

新規ドキュメント 2017-05-17 14.14.37_1.jpg

exports はパッケージ単位。requires はモジュール単位 新規ドキュメント 2017-05-17 14.20.12_1.jpg

JLinkを利用すると、JDKのクラスモジュールのうち必要なものだけ指定して読み込むことが出来る →メリットは? cloudなどで多数のJDKを起動する場合などに、リソースの節約になる

jdepsでjarの依存関係を検査することができる(Java8から提供されている) 新規ドキュメント 2017-05-17 14.32.35_1.jpg

Automatic Modules 既存のJarを自動的にmodule化する機能 モジュールベースで開発されてないものは、Automatic modules機能を使う。Jarの変更なし

Servlet 4.0 で始めるHTTP/2 (日本オラクル株式会社 柳原 伸弥)

概要(公式ページより)

HTTPの仕様が16年ぶりにHTTP/1.1 からHTTP/2に更新され、通信効率を向上するさまざまな仕組みが取り込まれました。Servlet 4.0では、HTTP/2の活用するアップデートが行われています。本セッションでは、Servlet 4.0を用いたHTTP/2 の活用例についてご紹介します。

Servlet振り返り

  • サーバサイドで動作するJava
  • Controllerとしての役割

Servlet4.0概要

  • Servlet4.0 2017/7リリース予定
  • HTTP2対応

HTTP/2概要

  • 1系
    • TCPコネクションについて、リクエスト・レスポンスが1:1
    • 原則として1つのリクエストの完了を待ってから、次のリクエストを送信→待ちが発生
    • 高速化の取り組み
      • CSSスプライト
      • インラインイメージ
      • ドメインシャーディング
  • 2系
    • TCPコネクションについて、ストリームの多重化
    • ストリーム優先度
    • Server Push
    • ヘッダー圧縮(オーバーヘッドを少なくする)
    • バイナリー・フレーム(今まではテキストベースだった)

Server Push

  • 一つのリクエストに複数のレスポンスを返す
  • PushBuilderオブジェクトを作成 (request.newPushBuilder();)
  • PushBuilderオブジェクトは再利用可能
  • GETまたはHEADを利用する(「キャッシュ可能」かつ「安全」であること(RFC 7540の仕様に準拠))
  • JSファイルの結合や、CSSスプライトを行う必要がなくなる

新規ドキュメント 2017-05-17 14.32.35_2.jpg

Java SE 9のすすめ (Java in the Box 櫻庭 祐一)

概要(公式ページより)

Java SE 9というと、Project JigsawやJShellを思い浮かべるかもしれません。しかし、Java SE 9はそれだけではありません。Java SEの機能追加を定めるJEPの数は89もあります。 本セッションでは、Java SE 9の多くの新機能の中から言語仕様の変更や、コアライブラリの変更点、また互換性に問題がある点などについて実例と共に解説します。

Jigsaw, JShellの話はしない

アジェンダ

  • Compatibility
  • Brand new
  • Update

Compatibility

  • Language & Library
    • アンダースコアのみの変数名は使用できなくなった
    • 消えたメソッド
      • OSに直結するようなメソッドは隠蔽された(Jigsaw絡み)
    • deprecated
      • threadのStop
      • Reflection系のメソッド
  • VM&Tools
  • Operation & Management
    • No More Visual VM
    • No More hprof(heapのプロファイラ), jhat
    • JRE Structure
    • No More rt.jar, tools,jar, lib/ext
    • No More -Xbootclasspath
    • Default GC: G1GC (今まではパラレルGC)
    • Deprecated: CMS(GCの一種)

Brand New

  • Jigsaw
  • Project Kulla/JShell
  • Reactive Streams
    • 非同期プロセス
    • Publisher-Subscriver Model (w / Back Pressure)
    • Flowインターフェース
      • Publisher
      • Subscriber
      • Subscription
  • JEP11 Incubator Modules
    • ベータ版のような機能をJDKに含める
      • Java SE 9 : HTTP/2 Client

Update

  • Language: Milling Project Coin
    • @SafeVarargs
    • try-with-resources
      • finalのついた変数ならばtry句に使用可能に(実質的finalでもOK(Java8より))
    • ダイヤモンド演算子(<>)
      • 匿名クラスでも利用可能に
    • Interfaceでprivateメソッド
    • アンダースコア
  • Library
  • Stream
    • Factory Methods
      • ofNullable(t)
      • iterate(seed, hasNext, next)
        • 条件とつけられるようになった(今までは無限イテレート)
    • New Methods
      • take/dropWhile
      • Collectors.flatMapping
      • Collectors.filtering
  • Optional
    • stream()
    • ifPresentOrElse(action, elseAction)
    • or(supplier)
      • Optional opt = opt1.or(() -> opt2)
  • Collection
    • Factory Method
      • of()
        • List l = List.of(0,1,2);
        • Map<Integer, String> m = Map.of(0,”a”,1,”b”);
    • Making Immutable Collection
    • Enumeration.asIterator();
  • String
    • char → byte
      • heapの使用量がかなり減る
    • concatenation
      • StringBuilder → InvokeDynamic
        • 最適化が可能に
  • Deprecated
    • @Deprecatedのついたものは本当に消される
      • Deprecatedの警告が出た場合はすぐに対応すべき
  • Javadoc

Spring Framework 5.0によるReactive Web Application (Pivotalジャパン株式会社 槙 俊明)

概要(公式ページより)

Spring Framework 5.0の目玉機能としてReactiveプログラミング対応が加わり、Spring WebFluxという新しいWebフレームワーク及びランタイムが追加されます。 本セッションでは、Reactive対応の背景とReactive Streams/Project Reactorの説明から入り、Spring Boot 2.0を交えたSpring WebFluxの使い方をコード例を中心にご紹介します。

発表資料

https://www.slideshare.net/makingx/spring-framework-50-reactive-web-application-javadaytokyo

Reactiveとは?

  • Non-Blocking
  • event-driven
  • backpressure

種類

  • Sync/Bloking
  • Async & Blocking
    • マルチスレッド
      • スレッドを立ち上げる処理が重い
  • Async & Non-Blocking

    • Event-Loop
    • I/Oの待ち時間を有効に利用できる
  • Servletを使うと必然的にBlockingになる

  • Nettyを利用するとNon-Blocking & Event-Loop (Apple, Twitterなどで利用されている)

SpringがReactive対応する理由

  • マイクロサービス→無駄なくスケール可能に
  • スロークライアントからのアクセス
  • スケーラビリティ・安定性など

Reactive Streams

  • non-blocking
  • back prassure
    • データの流量を調節する機構

対応ライブラリ

  • RxJava
  • Reactor
  • Acca Stream

Reactorの場合

Flux/Mono

  • Flux
    • Publisherの実装0~N件のデータを表現する場合に使用
  • Mono
    • Publisherの実装 0または1のデータを表現する場合に使用

SpringFW5.0でのReactive Stream 新規ドキュメント 2017-05-17 17.52.39_1.jpg