JavaOne Tokyoに参加してきました
Ruby大好きな私は全てをRubyだけで片付けたいのです。しかし、仕事となるとお客様の様々なご要望に答えていかなくてはなりません。エンタープライズ向けのツールやパッケージを考えるとJavaの世界は非常に魅力的です。
今回JavaOneに参加した目的はそうしたJavaを取り巻くエコシステムを肌で感じる事、それからJRubyとアプリケーションのデプロイ環境の調査でした。収穫はまずまずという感じでしたが、2日間岡山から参加した他のメンバーや全国のJavaコミュニティの方と楽しくすごすことができました。
以下、参加レポートです
1日目
NIO.2を使って、簡単ファイル操作 櫻庭 祐一 氏
Javaでファイルコピーを行おうとすると入力用と出力用2本のFileStreamを開く必要があったが、New I/O 2を使用することで簡単にファイル操作を行うことができるという内容。正直、今までこんな基本的なファイル操作もできなかったの?と思った。Javaは良くも悪くも後方互換を重視している言語ということか。
PlayFrameworkでつくるWebSocketアプリケーション 原 一浩 氏
WebSocketを使用することでクライアント間の通信を高速に行うことができることをリバーシのサンプルでデモ。PlayFrameworkの1.x系は安定版、2.0系は実験版という位置づけ。ゲーム以外でどんな利用分野があるか考えされられた。
2日目
Java SE 7 InvokeDynamic in JRuby 中村 浩士 氏
一生懸命話を聞いてたらあっという間に1時間たっていた。2日間で最も刺激を受けたセッションだったと思う。
JavaSE7から動的言語に最適化するために一度呼び出された命令をキャッシュしてくれるような仕組みとしてInvokeDynamicという機能が追加された。JRuby1.7系でどのような最適化がされているかを細かく説明してくれた。
実はフィボナッチ数の算法のベンチマークで好成績を残すためだけにマイナス1する命令が仕込まれてたりしたのが面白かった。
性能評価でJRuby1.7はCRubyの約3倍のパフォーマンスを発揮しており、処理の内容によっては業務でJRubyを使用することも考えようと思った。
マルチコアCPU時代のJavaプログラミング 数村 憲治 氏
先の説明でJRubyでプリエンプティブなマルチタスクを実現できれば!と夢が広がっていたのだが、このセッションの内容で考えさせられる内容だった。
StringBufferはスレッドセーフに作られているが、スレッドを使用していないのであればStringBuilderを使うべきという話があった。このようにスレッドを意識して作られている命令かどうかでマルチコアの性能を生かせるかどうかが決まる。JRubyで単純にスレッドを作れば高速なマルチタスクになるわけではなく、JRubyで呼び出すその先の処理でjvmがどの命令を使っているかを意識する必要を感じた。
JSR 353: Java API for JSON Processing 山本 裕介 氏
JavaのJSONライブラリ制定にむけてどのようなことを意識しているかという話。JSONはRubyやJavaScirptでしょっちゅう使うが、色々細かい点で決まりごとがあることが分かった。
山本氏はJSONライブラリをなるべくカジュアルに使用したいためVisitorパターンは実装したくないらしい。XMLの偉い人をどう説き伏せるか思案中とのこと。