LoginSignup
12
18

More than 5 years have passed since last update.

【勉強会メモ】Java Day Tokyo 2017

Last updated at Posted at 2017-05-17

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:PythonやRubyの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
    • CPU/GPU

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
    • No More Java Plug-in Applet
    • No More Windows x86 Clinent VM
    • No More Java DB
  • 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 m = Map.of(0,”a”,1,”b”);
    • Making Immutable Collection
    • Enumeration.asIterator();
  • String
    • char[] → byte[]
      • heapの使用量がかなり減る
    • concatenation
      • StringBuilder → InvokeDynamic
        • 最適化が可能に
  • Deprecated
    • @Deprecatedのついたものは本当に消される
      • Deprecatedの警告が出た場合はすぐに対応すべき
  • Javadoc
    • HTML5対応
    • SearchBox

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の使い方をコード例を中心にご紹介します。

発表資料

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

12
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
18