3日目。
※11/16公開
今日はJava SE系が主です。Java SE系は、Hiltonが会場です。
Moving to G1 GC [CON5823]
G1GCの話。
英語でGCの話を聞くのは、人類には早すぎた。
してたのですけど、Javaパフォーマンス本を読み直そうとずっと思ってました。
- 作者: Scott Oaks,アクロクエストテクノロジー株式会社,寺田佳央,牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/04/11
- メディア: 大型本
- この商品を含むブログ (12件) を見る
ランチと展示
今日のランチはHiltonのを取りにいきます。Hiltonでは展示も行われています。
展示で写真とってると、JRebelで有名なZEROTURNAROUNDの人たちが手をふってくれました。
で、Hiltonすぐ横のTaylor Streetをふさいで設営されているDuke's Cafeで食べます。
JDK 9 Language and Tooling Features [CON11284]
try-with-resourceでfinalか実質的finalならtryの前に初期化できる。
final Resource r = new Resource(); try(r){ ... }
これ、catch句とかでリソースを使いたいときに便利になります。
匿名クラスでもダイヤモンド推論ができるようになる。
Map<String, String> m = new HashMap<>{ { put("a", "apple"); put("b", "banana"); } }
地味すね。
ただ、不可解に変なコードを書く必要がなくなってよいです。
型推論が効率よく。
C<String> cs = new C<>( new C<>( new C<>( new C<>( new C<>()))));
ということで、全体に地味な調整って感じですね。
資料はこちら
https://blogs.oracle.com/darcy/resource/JavaOne/J1_2015-jdk9-langtools.pdf
Effective Java Streams [CON7066]
Streamの使い方。実はこれは唯一概要にValhallaという言葉があったセッション。
で、まずパターン。
3つのStreamを結合するとします。
Stream<String> a = String.of("a"); Stream<String> b = String.of("b"); Stream<String> c = String.of("c");
Streamを結合しようとすると、concatというメソッドがありますが、ふたつのStreamしか結合できません。
Stream.concat(a, Stream.concat(b, c))
ということで、flatMapを使います。
Stream.of(a, b, c).flatMap(s -> s)
なるほど。
あと、OptinalのStreamから値があるものだけを抜き出すとき。
Stream<String> optionals = Stream.of( Optional.of("a"), Optional.empty(), Optional.of("b"))
こんな感じになります。
optionals .filter(o -> o.isPresent()) .map(o -> o.get())
これが、こう書けるようになります。
optionals.flatMap(Optinal::stream)
って、いつの間にかJava9の話になっている。
あと、NetworkInterfaceとか、Enumerationを返してたところにStreamを返すものを追加。
Stream.takeWhile/dropWhile便利そう!
あと、Files.linesの並列時に速くなったとか。
collect(toList())の並列性をよくするとか
そして、どういう文脈だったか忘れたけど、IntStream <: Stream
ここで試せる
http://hg.openjdk.java.net/valhalla
パッケージはjava.anyutil.streamだそうな。
なんでzipメソッドがないか。
zip(Stream, Stream)だけじゃなく、zip(Stream, IntStream)とかzip(IntStream, Stream)とかいろいろ用意する必要があってちょっと大変。
Valhalla待ち。
ライブラリも言語仕様も全部Valhalla待ちになってて、これ遅れるとヤバそう。
Ask the Architects [CON6826]
Javaのえらい人たちがいろいろ話すセッション。
資料もなく英語で自由に話す人たちについていくのは、人類には早すぎた。
Valhallaとかの話はなかった気がする。
The sun.misc.Unsafe Situation [CON7076]
Unsafeは名前のとおり、あんまり安全じゃないけど内部でよく使われているAPIで、これを置き換えようという動きがあります。
内部では、reflectionやserialization、その他いろいろ使われています。
そして、外部でも、HadoopやSparkのようなデータ処理プラットフォームから、ScalaやJRubyなど言語処理系まで、幅広く使われてます。
で、まあチェーンソーをジャグリングしてるような危なさがあると。
実際のメソッド
利用例 | Unsafe |
---|---|
並列化プリミティブ | Unsafe.compareAndSwap* |
シリアライゼーション | Unsafe.allocateInstance |
メモリ管理、レイアウト | Unsafe.allocate/freeMemory |
JVM外とのやりとり | Unsafe.get*/put* |
それに対応する機能。ここでPanamaデスヨ!
利用例 | 機能 |
---|---|
並列化プリミティブ | JEP 193 Variable Handles |
シリアライゼーション | JEP 187 Serialization |
メモリ管理、レイアウト | Project Panama, Project Valhalla, Arrays 2.0 |
JVM外とのやりとり | Project Panama, JEP 191 FFI |
で、ここでマーク・ラインホルド氏がなにやら。
何の話だったか覚えてない・・・
Java9では
利用例 | 機能 |
---|---|
並列化プリミティブ | JEP 193 Variable Handles |
シリアライゼーション | |
メモリ管理、レイアウト | 配列の境界チェックやアクセスの改善 |
JVM外とのやりとり |
Closer to the metal、ハードウェアに近づこう、というのがPanamaのテーマですね。
- UnsafeはJava 9で凍結されるけど利用可
- Java9でちょっとした対応
- Project ValhallaやPanamaでのサポートに超期待
資料はこちらで公開されてます。
http://cr.openjdk.java.net/~psandoz/conferences/2015-JavaOne/j1-2015-unsafe-CON7076.pdf