検索
ニュース

Java 8時代の開発者のためのデバッグ/トラブル解決の基本・応用テクニック〜JJUG CCC 2014 Springまとめリポート(後編)(3/3 ページ)

Java開発における3大トラブルと対策、IDEのデバッガー活用の必要性、Java 8より導入された新しいメモリ領域を使いこなすためのテクニック、独自のトランザクショナルメモリ機構を実装した有効性などをお伝えする。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

独自のトランザクショナルメモリ機構を実装した有効性

 講演「Javaでトランザクショナルメモリを使う」で、JVMに独自のトランザクショナルメモリ機構を実装するというユニークな試みについて発表したのは富士通の数村憲治氏だ。


トランザクショナルメモリは競合の可能性のある処理をロックせず楽観的に実行、最後まで競合がなければ結果を確定(コミット)することでマルチスレッド処理の高速化を図る仕組み

 トランザクショナルメモリはソフトウェアによる実装とハードウェアによる実装があるが、数村氏はインテルのHaswellアーキテクチャに搭載されたハードウェアトランザクショナルメモリ機構をJVMから利用できるようにしたという。


既存のトランザクショナルメモリの実装例

HaswellのTSX(トランザクショナルメモリ用インストラクションセット)の概要

 数村氏は、実装方法として「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日に開催されるので予定を空けておいてはいかがだろうか。

著者プロフィール

山本裕介

Twitter APIのJava向けライブラリ「Twitter4J」やトラブルシューティングツール「」などを開発するオープンソースソフトウェアデベロッパ。

株式会社サムライズム代表。

Twitterアカウント:@yusuke


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る