Futureスマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。QiitaJITWatchについてJVMなみなさんは、JITコンパイルをご存知だと思います。JITWatchは、アプリケーションにおけるJITコンパイルについて、可視化し分析するためのツールです。GitHubで公開されており、すぐに使うことができます。ライセンスはBSDなので、とくに問題ありません。GitHubJITWatchで見るための設定JITWatchで可視化、分析するためには、アプリケーションでログを出力する必要があります。そのためにJVM引数に次のものを追加します。-XX:+LogCompilationこうすることで、アプリケーションを実行すると、実行したディレクトリに「hotspot_pid9999.log」(9999は起動したプロセスのIDとなる)というファイルが出力されます。マシンコードも見るさらに、JITコンパイラによって生成されたマシンコードを見たい場合、次のオプションも合わせて記述します。disAssembler)をセットアップします。HSDISは以下のサイトからダウンロードできます。KenaiMacの場合、「bsd-libhsdis-i386.dylib」をダウンロードし、「hsdis-amd64.dylib」にリネームします。JDK8の場合、そのファイルを「JAVA_HOME/jre/lib/server/」に配置してください。HSDISはデフォルトではAT&Tのシンタックスとなります。Intelのシンタックスにすることもできるようです(詳細は不明)。packageします。targetディレクトリにjitwatch-1.0.0-SNAPSHOT.jarができます。ログファイルを簡単に生成したい場合、JITWatchがサンプルアプリを用意してくれているのでそれを利用するとよいです。makeDemoLogFile.shを実行するだけで、ログファイルを生成します。ここからは、そのサンプルが作ったログファイルを使って説明します。JITWatchのルートディレクトリにlaunchUI.sh(.bat)があるのでそれを実行します。次のようなウィンドウが表示されます。Logで先ほど出力するようにした「hotspot_pid9999.log」を指定します。locationsにはアプリケーションのclassファイルの場所を指定します。Startボタンを押すとログファイルの解析を開始します。終了すると、次のような画面になります。Cache、TriView、Suggestを押すと、詳細な情報を見ることができます。これらの画面で出てくるC1やC2という単語はコンパイラレベルです。replacementのことで、ループ内の最適化のことを指します。JITWatchで一番おもしろい部分はTriViewです。この画面でソースコードとバイトコード、アセンブリコードを対比させて見ることができます。メソッド内の該当コードにポインタを合わせると、その部分のバイトコードとアセンブリコードに色がつきます。PrintAssemblyしていないときは、アセンブリコードは表示されません。Chainを押すと、コンパイルのチェーンを見れます。おもしろい機能はSuggestです。以下のようなことが書かれています。350ホットなメソッドだけれども、メソッドが大きすぎてインライン化できないとあります。リファクタリングしてより小さいメソッドにしようという提案があります。いった提案を利用して、よりJITコンパイルを促進するようにアプリケーションを作成することができます。最後に注意JITコンパイルには静的なルールと動的なルールがあります。サンプル程度の場合、静的なルールだけが使われますが、実際の環境では動的なルールがほとんどを占めます。ある場合のJITコンパイルのルールが他のアプリケーションでも常に適用できるわけではないので、注意しましょう。JUGとは何か関ジャバがJUGsへ入ると何が起こるのか!?»プロフィールid:jyukutyo元アルバイト塾講師なソフトウェアエンジニアです。京都にあるモバイル系企業で働いています。Blog|ブログを報告する。