Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JavaOne報告2017

425 views

Published on

JavaOne2017報告

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

JavaOne報告2017

  1. 1. JavaOne 2017報告 2017/11/17 LINE Fukuoka きしだ なおき
  2. 2. Agenda •  JavaOneについて •  Javaのリリースサイクル •  Java Next •  Java EE •  周辺技術
  3. 3. JavaOneについて
  4. 4. JavaOne •  Oracleが主催するJavaイベント •  サンフランシスコで開催されるものが最大 •  Oracle Open Worldと併催
  5. 5. 会場がMosconeに •  2009あたりまでMosconeだった •  2016までHiltonとParc55(とNikko) – Hiltonは複雑怪奇 – 探検感が楽しかった •  ただしMoscone SouthではなくMoscone West – Moscone Southは工事中
  6. 6. セッション枠が45分 •  去年までは60分 •  聞くのが楽 •  ちょっと物足りない
  7. 7. 昼食にドリンクがない •  いままではペプシかなにかがあった
  8. 8. 時差ぼけ •  おかげで朝8:30のセッションに元気に 参加できます! •  日本に戻っても2週間くらい午前中起床が 続きました。 •  昼夜逆転対策にサンフランシスコおすすめ
  9. 9. サンフランシスコ •  日本人観光客がいない – 中国語を話す人が多い •  ホームレスがまた増えた – 去年減ったように見えたホームレスが増えてた – 子どもをつれてるホームレスが何組かいた •  SF MOMAの改修終了
  10. 10. JavaOneセッションの傾向 •  セッションの検索件数をカウント •  about Java •  about Next Java •  about JVM Language •  about Middleware •  about Archtecture •  about Buzz word
  11. 11. about Java •  “java 9” 32 •  “jdk 9” 21 •  Java EE 57 •  jigsaw 9 •  module 17 •  Virtual Machine 7 •  JShell 5 Java9とくにモジュール関連が多い
  12. 12. about Next Java •  valhalla 1 •  panama 1 •  amber 0 •  loom 0 •  “java 10” 0 •  “jdk 10” 1 次のJavaの仕様についてのセッションが ほぼない
  13. 13. about JVM Language •  groovy 9 •  kotlin 12 •  javascript 32 •  Scala 46 – ほぼ”Scalable”・・・。タイトルは5件 Kotlin人気
  14. 14. about Middleware •  sql 18 •  spark 14 •  ka[a 11 •  cassandra 5 •  mongodb 1 •  Hadoop 2 •  HBase 1 Spark/Ka[aが人気。 Hadoopは不人気というかインフラ化
  15. 15. about Archtecture •  reacve 19 •  microservice 162 •  serverless 12 •  docker 33 •  kubernetes 20 みんなMicroserviceいいたいだけでは。 Docker人気。
  16. 16. about Buzz word •  big data 12 •  cloud 273 –  カテゴリ名に入っていたのでサーバーサイド系が すべてカウントされていた。タイトルには50程度。 •  Machine Leaning 19 •  Blockchain 4 •  IoT 16 •  raspberry 5 •  VR 3 •  gpu 0 •  fpga 0 機械学習人気 GPUセッションがなくなった
  17. 17. リリースサイクル
  18. 18. JavaOne発表時 •  6ヶ月ごとにフィーチャーリリース •  バージョン番号は年.月 –  次回リリースはJDK 18.3 •  3ヶ月ごとにメンテナンスリリース •  サポートは次のフィーチャーリリースまで •  3年ごとにLong Time Support(LTS) –  Oracle JDKのみ •  Open JDKとOracke JDKは同じバイナリに –  いままで有償だったツールもすべてOpenJDKに •  Oracle JDKは顧客のみ
  19. 19. Javaリリースサイクル hdps://www.youtube.com/watch?v=UeyyLielXsU
  20. 20. Stephen Celebourne氏の批判 (Date Time API作者) •  ツールの対応に3ヶ月、評価に3ヶ月かかる •  6ヶ月のサポートではいつまでも新バージョン が使えない •  バージョン番号評価が今までと違うので対応 が必要
  21. 21. DEVOXX Belgiumでの発表 •  OpenJDKも3年ごとに3年のサポート •  バージョン番号はフィーチャーリリースごとに インクリメント – 次はJDK 10
  22. 22. Javaリリースサイクル(new) hdps://www.youtube.com/watch?v=x7pkWlost64
  23. 23. バージョン番号 •  2018/03 フィーチャーリリース JDK10 •  2018/04 メンテナンスリリース JDK10.0.1 •  2018/07 メンテナンスリリース JDK10.0.2 •  2018/09 フィーチャーリリース JDK11 LTS •  2018/10 メンテナンスリリース JDK11.0.1 LTS •  2019/01 メンテナンスリリース JDK11.0.2 LTS
  24. 24. Java Next
  25. 25. Java Next •  Project Valhalla –  Value Type –  Specializaon •  Project Panama –  Vector –  Value Layout •  Project Amber –  var –  Padern matching –  Enhanced Enum •  Project Loom –  Fiber(Lightweight Thread) –  Connuaon
  26. 26. Value Type •  Codes like as a class, works like as an int •  Not a reference type •  Can not be null value class Point { int x; int y; }
  27. 27. Specialization •  We can write List<int> •  No more IntStream and OptionalInt
  28. 28. Local Variable Inference •  Inferring for local variable •  JEP 286 var now = LocalDateTime.now(); var list = new ArrayList<String>(); var stream = list.stream();
  29. 29. Enhanced enum •  use generic parameter for enum •  JEP 301 enum Hoge<T> { FOO(Integer.class , 1), BAR(String.class, "test"); ... T getValue() { return value; } }
  30. 30. Data Class •  We want to declare class as just structure •  Now we use lombok @Value •  Language has Data Class, compiler can distinguish it. @Value class Point { int x; int y; } class Point (int x, int y) {}
  31. 31. Extended Switch •  instanceof •  pattern matching •  switch expression
  32. 32. Instanceof •  use type as a condition Object comp = getComponent(); String message; if (comp instanceof Integer) { int i = (Integer)comp; message = "整数やね " + i; } else if (comp instanceof String) { String s = (String)comp; message = s.length() + “文字やね"; } else { message = "ようしらん"; } print(message); Object comp = getComponent(); String message; switch (comp) { case Integer i: message = "整数やね " + i; break; case String s: message = s.length() + “文字やね"; break; default: message = "ようしらん"; } print(message);
  33. 33. switch expression •  Write switch as an expression Object comp = getComponent(); String message = expswitch (comp) { case Integer i -> "整数やね " + i; case String s -> s.length() + “文字やね"; default -> "ようしらん"; } print(message);
  34. 34. Pattern matching •  Pattern matching with data class Object comp = getComponent(); String message = switch (comp) { case Point(var x, var y) -> String.format("点(%d,%d)やね", x, y); case Integer i -> "整数やね " + i; case String s -> s.length() + “文字やね"; default -> "ようしらん"; } print(message);
  35. 35. matches •  matches演算子 Object comp = getComponent(); if(comp matches Point(var x, var y)) { printf("点(%d,%d)やね", x, y); }
  36. 36. ところで、varすでに試せます。 •  jdk10で試せる – hdp://jdk.java.net/10/ •  JShellで超便利 •  IDEは対応していない – varがあって補完がない世界より、補完があって varがない世界のほうがはるかにつよい
  37. 37. jdk10にvarが入る •  言語仕様すら6ヶ月でかわる •  なにが変わるか事前に把握しづらい – リリース3ヶ月前のRamp Downで確定 – 進捗状況はプロジェクトごとに確認する必要があ る •  なにが変わったか事後に把握しづらい •  なにが動かせるか把握しづらい •  どうすんの
  38. 38. Java EE
  39. 39. Java EEセッションが不人気 •  Linda Demicelのセッションに空席 – Spec Lead – 同じ話を3年目? •  MVCは5人・・・
  40. 40. Java EE 8 •  Servlet 4.0 –  HTTP/2対応 •  CDI 2.0 –  Java SE対応 –  非同期対応 •  JAX-RS –  Server Sent Event対応 •  JSON-B –  JSON Binding –  Jackson
  41. 41. EE4J •  Java EEをEclipseに寄贈 •  Oracleのコントロールがゆるくなる •  最近Oracleなんもしてない
  42. 42. EE4Jに至る道 •  2013/07 Java EE 7リリース •  2015/02 (HTTP/2リリース) •  2015/07 Java EE 8リリース延期 2016->2017 •  2015/09 Javaエバンジェリスト大量解雇 •  2016/06 Java EE Guardians •  2016/08 Java EE MicroProfile •  2017/08 Java EEのオープンソース化を発表 •  2017/09 EE4J
  43. 43. 周辺環境
  44. 44. Javaの実行環境の変化 •  AOT –  事前コンパイル •  Graal –  Javaで書かれたJIT •  OpenJ9 –  IBM J9がオープンソースに •  新しいGC –  Shenandoah by Redhat –  ZGC by Oracle –  数百GB〜数TBのメモリに対応
  45. 45. ハードウェア対応のフレームワーク •  Vector – not java.ul.Vector – SIMD対応 •  Persistent Memory – 永続メモリ(不揮発メモリ)
  46. 46. fn project •  Java対応のサーバーレスフレームワーク •  Dockerネイティブ
  47. 47. fn projectは簡単に試せる •  ぜんぶDockerがやってくれる – これで試せる $ brew install fn $ fn start $ mkdir sample $ cd sample $ fn init --runme java $ fn deploy -app myapp --local
  48. 48. サーバーレスとJava •  サーバーレス –  要するにCGI –  ゲートウェイだけが立っていてアプリケーションはそ の都度プロセスを動かす –  サーバー管理の必要性が低い –  スケールアップが容易 •  多重化はしたいけど負荷はそう高くないみたい なところにいいかも –  CMSのように、多重化してるけどあまり使われないも のとか
  49. 49. サーバーレスとJava •  Javaの欠点 – プロセス起動が重い – 一度しか実行されないので実行時最適化が無駄 •  最適化してる間に実行おわる •  最適化しても使われない
  50. 50. とうこともあると思って •  プロセス起動が重い – 読み込むクラスを減らす •  モジュール化 •  実行時最適化が無駄 – あらかじめ最適化 •  AOTやOpenJ9
  51. 51. JUnit5 •  再設計 •  だいぶ便利 – Nested – Parameterize
  52. 52. おまけ •  成田→福岡の飛行機の夜景がきれいでした hdp://d.hatena.ne.jp/nowokay/20171025#1508893711
  53. 53. まとめ •  モジュールがJavaを変えた – Javaのコードの書き方は変わらない – Javaの中身が変わった – Javaの世界が変わった

×