先週の話になってしまいますが、JJUG CCC に参加してきました。今回も前回に引き続きスタッフ枠で参加しました。
今回は主に Kotlin 系のセッションと JVM 関連のセッションに参加しました。JJUG で Kotlin …?というのはあるかもしれませんが、昔から Scala のセッション *1 もありますし、 JVM の上に乗っている言語ならば CfP を通しているのかな?という感じですね。
Kotlin の導入についてですが、 Web フレームワークの充実が実はまだまだで、現状だと Spring Boot が一番いいのでは?と個人的には思っており、Spring Boot でやってみた系のセッションがあったらよかったなあという感じがするので、有識者の方々よろしくお願いします (人任せ)。
今回参加したセッションについて簡単に書き留めておこうと思います。
午前中
コーヒーを配りつつスタッフとおしゃべり。次回もコーヒー配りたいです。
サーバーサイド Kotlin
サーバーサイドでも Kotlin を使えるぞ、という話でした。当然そうですね。Spring Boot の導入時の小話とかをもう少し聞きたかったのですが、それが必要ないくらい Spring Boot x Kotlin は導入が楽、ということでしょうか。
サーバーサイドへの Kotlin 導入はなかなかありだと思っていて、今後数年間をしのぐことはできそうかなと思っています。しかし、 Java も着実に進化を遂げており、数年後には Kotlin にある機能の多くが Java に入っている、という可能性もあります。そうなってくると、 Java と Kotlin どちらが選ばれるかな、というのは見どころかもしれませんね。
ゴールドマン・サックスにおけるCamundaを用いたビジネスプロセスの可視化とワークフローの自動化
ゴールドマン・サックスによるスポンサーセッションでした。ビジネスワークフローの可視化という概念自体は、今後使っていきたいなと思って興味深く聞いていました。
金融機関の場合、業務要件が良くて文章、悪いと書類にすらなっていないことが多いのですが、それらを当事者全員がすぐにわかる図にしておくというのは、業務が複雑な業種であればあるほど有用なように思います。
ビジネスサイドとエンジニアリングサイドが一同に会して話をすると、お互いのもっている業務知識に差があり言語だけでの会話だとどうしても認識の齟齬が生まれがちではありますが、それを解決する手段として今回紹介された手法は使えるなあと思って聞きました。
オレオレJVM言語を作ってみる(四則演算するだけだけど)
ANTLR と Truffle を使った超簡易的なスクリプト言語インタプリタの話です。Lexer, Parser, ParserCombinator, 抽象構文木など、言語実装時に必要な知識を初心者の方向けに総ざらいで話す感じでした。言語実装をやってみたい方が最初に読むにはとてもいいスライドですね。
CPU から見た G1GC
話の記憶が若干あいまいですし、メモもまともに取ってなかったので間違ったことを書くかもしれませんが、感想を書いておきます。
ある特定の処理を Parallel GC と G1GC で動かした場合に、Parallel GC の方が数倍処理が早く終わることがあるという話から始まり、それがなぜか?というのを突き詰めていくセッションでした。
そこに関連するのは2つのバリアで、1つがメモリバリアです。これは CPU 演算の命令のひとつで、値の Read / Write 時に実行順序を制限する機能を持っています。これが処理を一時的に専有することで G1GC が遅くなるように見えるということでしょう。
もう1つはストアバリアと呼ばれるもので、これは正直知らなかったですし、あんまり理解していません。Java の GC の主なアルゴリズムは Mark&Sweep ですが、どうしてもこのアルゴリズムだと、不当に GC されるものが出てきてしまいます。それを解消するために RemeberSet というものを導入するのですが、この非同期処理がネックになっているということ??
調べているうちに色々記事などを見つけたので共有しておきます。
- JVMチューニング: G1GCの使いどころとCMS GCからのマイグレート
- Memory allocation (& GC 処理) : Garbage Collection を補佐する処理 : Write Barrier 処理 : Template Interpreter での処理
- JetBrains による HotSpot のコードのようですが、ストアバリアで焦点が当たっていた箇所のコードがありました: jdk8u_hotspot/sharedRuntime.cpp at master · JetBrains/jdk8u_hotspot · GitHub
スポンサーLT (CData)
日本酒キャンペーンがセッション中に開催されて、Twitter で応募してみたところ、なんと当選してしまいました。おいしく頂いています。ありがとうございました。宮城の地酒だそうです。
懇親会その1
登壇者の方とちょっとおしゃべり、など。
懇親会 LT
byte 配列の末尾から要素を追加していくという話、メモリ効率がいいから?という話でしたが、本当にそうなのかはちょっと気になりました。配列の要素数が変動することがなければ、先頭から入れても末尾から入れても計算量は変わらない気が。それにしても、末尾から入れるのはなぜなんでしょう…。有識者の回答を求む、です。
懇親会その2 (スタッフ懇親会)
リンカの話をしたのと、せろさんが29歳で OSS コミッターになっていたすご!ということと、超若い Java のコミッターの話と、JavaOne の話を延々していたように思います。お寿司がとてもおいしかったです。
まとめ
次回も JVM 系のセッションがあれば参加していきます。よろしくお願いします。
*1:移行話が多いですが