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


















