JavaOne 2017 3日目レポート

2日目の分書いてないですが、Gihyo.jpにキーノートのレポートを書かせていただいたので、ひとまずそれで。
第1回 JavaOne 2017開幕,キーノート速報~Project Jigsawついにリリース!女性コミュニティ活性化,データが創る未来:Java 9のその先へ~JavaOne Conference 2017レポート|gihyo.jp … 技術評論社

Monitoring and Troubleshooting Tools Available in Your Java 9 “bin” Folder

JDK 9に含まれるモニタリングおよびトラブルシューティング・ツールの話。
主なものは以下の5つ。

jconsole

Javaアプリの監視と管理のためのグラフィカルツール。プロダクション環境でローカルで使うのは推奨しない。
リモートで使うには「com.sun.management.jmxremote.port=ポート番号」で起動。

jps

試験的ツール。対象のシステム上で動いているJVMを一覧表示する。ローカルでもリモートでも使えるけど、リモートで使うには対象のシステムでjstatdが動いている必要がある。

jstat

試験的ツール。JVMの状態を監視する。HotSpot VMのパフォーマンスを計測できる。リモートで使うには対象のシステムでjstatdが動いている必要がある。

jstatd

試験的ツール。JVMの状態をリモートで監視するためのデーモン。jpsやjstatなどをリモートで使うために必要。

JMC

Javaのミッションコントロールツール。JMXコンソールとJava Flight Recorder(JFR)を含む。
JFR APIJava 9でサポートされたので、カスタムのJFRイベントを作れる。新しいイベントもサポート(safepoint/codecache/compiler/G1/moduler)

その他、次のようなものもある。jhsdbって知らなかったのであとでチェックしよう。

  • jcmd
  • jdb
  • jinfo
  • jmap
  • jstack
  • jhsdb - Java HotSpot Debugger

以下のものはJDKには同梱されなくなった。

  • Java VisualVM
  • jhat
  • jsadebugd

Immutable Collections

immutableなcollectionって、本当はこういうものが欲しいけど、今のJava9でもまだちょっと足りないよね。じゃあどうしようか、という話。
まず、Immutable collectionに求めたい要件の提案。

  1. Manifest immutability
  2. Sealed
  3. Provide a bridge to mutable collections
  4. Efficient construction, updates, and copying

Java 9だとunmodifiable collectionsが使えるけど、上の要件は満たしてない。他のフレームワークはどうだろうか。

  • Guava - 1と2はOK。3は無し。4はconstructionとcopyingは一部OKだけどupdatesは無し。
  • Eclipse Collections - 1と3はOK。2と4は無し。
  • Vavr, Clojire, Scala - 全部OK。

Immutable collectionの実装はMapやSet、VectorのPersistent data structureにつながる。Hash Array Mapped Tries(HAMTs)がEfficient persistentのベースになる。ということで、ここから先はこのHAMTsベースのCollectionsを実際に自前で実装してみよう、という話でした。

Modules in One Lesson / Migrating to Modules

Mark ReinholdによるJigsawのセッション。2つとも満席。
MarkがJava 9のModulerの使い方について実際に目の前でデモ。emacsでその場でプログラム書いて、コマンドラインコンパイルしたりjlinkしたりする。目の前でどんどんコード書いて動いていくのは分かりやすくていいんだけど、新しい話はほとんど無かったのは残念。突然SwingSet2を起動して見せたのはちょっと笑った。

JDK 9 Language, Tooling, and Library Features

JDK 9のおさらい。あとで書くかも。

OpenJ9: Under the Hood of the Next Open Source JVM

IBMが開発してEclipse Foundationに寄贈したJavaVM「OpenJ9」の話。
http://www.eclipse.org/openj9/

ランタイム技術はEclipse OMR(とOpenJDK)ベース。つまりJITとかGCなんかの基礎部分はOMRをベースに作られていて、その上に起動の高速化とかメモリ使用量の削減みたいな拡張を加えている感じ。
ちょっと面白そうなので、余力があったら別途まとめたい。

最初の勢いで書いてたら体力がもたないことに気づいたので、尻すぼみですみません。