Java 8時代の開発者のためのデバッグ/トラブル解決の基本・応用テクニック〜JJUG CCC 2014 Springまとめリポート(後編)(3/3 ページ)
Java開発における3大トラブルと対策、IDEのデバッガー活用の必要性、Java 8より導入された新しいメモリ領域を使いこなすためのテクニック、独自のトランザクショナルメモリ機構を実装した有効性などをお伝えする。
独自のトランザクショナルメモリ機構を実装した有効性
講演「Javaでトランザクショナルメモリを使う」で、JVMに独自のトランザクショナルメモリ機構を実装するというユニークな試みについて発表したのは富士通の数村憲治氏だ。
トランザクショナルメモリはソフトウェアによる実装とハードウェアによる実装があるが、数村氏はインテルのHaswellアーキテクチャに搭載されたハードウェアトランザクショナルメモリ機構をJVMから利用できるようにしたという。
数村氏は、実装方法として「synchronizedの実装として使う」「APIとして提供」「特定ライブラリでの実装」の3つの方式を検討したが、実装の容易さと適用箇所を柔軟に設定できるという点から独自APIを用意する形とした。
効果を検証する上で、まずは実装自体のパフォーマンスを測定するため、データ競合(スレッド間で同じデータにアクセスするためのロック競合)が発生しないロジックでベンチマークを取ったところ、Javaで排他処理を書くのに一般的なsynchronizedを使った場合などと比べてかなり遅いことが判明した。
ネイティブコード呼び出し部分がボトルネックとなっていることが分かったため、トランザクショナルメモリ実装部がJITコード内でインライン展開されるよう最適化を施したところ大幅にパフォーマンスが改善されたとのことだ。
そこで初めてデータ競合が発生し得るロジックでベンチマークテストを行ったところ、3以上の多重度ではsynchronizedやReentrantLockを使ったケースよりも速いパフォーマンスをたたき出した。
今回の試みは既存のコードがそのまま最適化、高速化されるような方式ではないものの、ハードウェアトランザクショナルメモリの利用に今後大きな期待ができる結果といえるだろう。
数村氏は今回の独自実装とは別にOpenJDKで「-XX:+UseRTMLocking」というオプションを指定することでHaswellのトランザクショナルメモリ機能をsynchronizedブロックに利用する実装「JDK-8031320」が進んでいることを紹介した。残念ながら、その後Haswellのトランザクショナルメモリ実装は“まれ”に予期できない挙動を示すことがあるバグ「HSW136(英語)」が見つかっており、開発目的以外ではサポートされないこととなった。
次期アーキテクチャである「Browadwell」世代でも修正される見込みはなく、本格的に使えるのはBrowadwellのさらに次の世代以降となる見通しだ。高度にチューニングされたGCアルゴリズム、効率の良いネイティブコードを生み出すJITコンパイラー、優れたマルチスレッドモデルなどにより高いパフォーマンスが定評のJVMだが、今後も改善の余地があることは良いニュースだろう。
静的型付け言語の人気復活に伴うJava 8への関心
Web/スタートアップ周辺ではRubyやPythonといった動的言語が依然人気だが、ここ最近C#やScala、Swift、Go、TypeScriptといった静的型付き言語も人気だ。それとともに伝統的な静的型付け言語であるJavaはそのシンプルさ、パフォーマンスやスケーラビリティの高さ、そしてモダンな言語機能を搭載したJava 8のリリースもあり再び関心を呼んでいる。
年2回の大きなカンファレンスであるJJUG CCCの参加者は年々増えてきており、今回の「JJUG CCC 2014 Spring」は多くのセッションが立ち見となる盛況ぶりだった。次回のJJUG CCCも、一般公募を含めた多彩なセッションやワークショップでにぎわうことだろう。2014年11月15日に開催されるので予定を空けておいてはいかがだろうか。
- 日本Javaユーザーグループ
- JJUG Twitter:@JJUG
- JJUG Facebookページ
- JJUG イベント情報
著者プロフィール
山本裕介
Twitter APIのJava向けライブラリ「Twitter4J」やトラブルシューティングツール「侍」などを開発するオープンソースソフトウェアデベロッパ。
株式会社サムライズム代表。
Twitterアカウント:@yusuke
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Java 8はラムダ式でここまで変わる(1):初心者のためのJavaラムダ式入門とJDKのインストール、IDEの環境構築
本連載では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式について解説していきます。初回は、ラムダ式の概要と利点、必要性、JDK 8のセットアップ、NetBeans、IntelliJ IDEA、Eclipseの環境構築について。 - 「俺たちのJavaは、まだまだこれからだ」未来の鍵はInternet of Thingsにあり?〜JavaOne 2013まとめレポート(前編)
Java開発者の年次カンファレンス、JavaOne 2013がサンフランシスコで9月22〜26日に開催された。3つの基調講演、そして400を超えるセッションが行われるなど、圧巻のボリュームは、まさに「Java開発者の祭典」といえる。基調講演と主なセッション、全体の雰囲気を前中後編に分けてレポートする。 - WebSocketが一番速いアプリケーションサーバはどれだ?
双方向通信を実現するHTML5関連技術WebSocketを実装した3つのアプリケーションサーバの実装の違い・性能などを徹底検証する - Java SE 8、Java EE 7、JavaFX、Java Embeddedはどうなる?〜Java Day Tokyo 2013まとめレポート
OpenJDKで使えるJava 8の新機能、3Dの表現力が段違いで採用企業が増加しているJavaFX、センサデータを企業で活用するJava Embedded、HTML5、WebSockets、JSON、バッチ処理機能を備え、6月13日にリリース予定のJava EE 7、世界に広がるJava Communityなどの最新情報をお届け。 - WebSocket、組み込み、並列処理で進化するJava、そして最強のIDEはどれだ?〜Java Day Tokyo 2013まとめレポート
Java EEにおけるWebSocket、並列処理の過去・現在・未来、Raspberry Piとの連携、Eclipse、NetBeans、IntelliJ IDEAの中から最強のIDEを決める座談会、ミニ四駆の発表もあったLT大会などの模様をお届け - HTML5やWebSockets対応が進むJavaの今後〜JavaOne 2012基調講演まとめレポート
HTML5やWebSockets対応が進むJava EE 7、シェアを伸ばすJava 7、そしてJava 8とOpenJDK、JavaFXの最新情報をお伝えする - JavaOne Tokyo 2012まとめレポート(後編):ラムダ式、JAR脱獄、JavaScript/Node.jsへの接近
JDK 8の新機能のうち、Lambda、Jigsaw、Nashornについて解説した講演を詳細にレポートする。そしてJava SE 9はどうなる? - JavaOne 2011まとめレポート:JavaはクラウドやHTML5、iOS/Androidも取り込む?
Java SE 8/9、マルチクラウドに進むJava EE 7、JavaFXと融合しAndroid/iOS対応を目指すJava ME、HTML5を取り込むProject Avatarなど - JJUG Cross Community Conference 2011 Spring レポート:オラクル買収後のJava 7と8、JavaFXはどうなるのか
Java SE/EEの今後やJRockitとHotSpotの統合など最新情報をお伝えする。そして今後のJavaOneは?