JVMのJITs はのことがよく聞きますが、プログラムの実行中にJITが実際に行っていることをプロファイルする方法については、多くの情報がありません。 -XX:+PrintCompilation
と-XX:+PrintOptoAssembly
の使用に関する多くのヒントがありますが、解釈が難しい本当に低レベルの情報になります。JVMの診断ツールと最適化のヒント
一般に、最適化の際には、専用のJITウォームアップ時間などを使用して一般的な操作のベンチマークスイートを用意したいと思いますが、コードで実際に最適化されている最適化を確認できます。おそらく私のJVMは特定のメソッド呼び出しをインライン展開すると考えていたかもしれませんが、何かを決めるのではなく、おそらくJITは自分のインバリアントとループ条件をあいまいに表現していたため、私はYourKitのようなツールが "JITで何が起こっているか"をサポートすると期待していますが、YourKitや他の場所でそのサポートを見つけることができませんでした。
理想的には、プログラムの実行中にJITのオプティマイザが思考している脳のダンプが好きです。私は自分の関数を十分に暖かくして、内部ループに3つのメソッドをインライン化し、ループを3つのセクションに分割することにしました。中間セクションの配列境界チェックはありません。これらの決定の要点と動機彼らのために。
私はここで何かが分かりませんか?何が起きているのかを把握するために内部ループを最適化するとき、JVMのパフォーマンスを意識したプログラマは何をしますか?確かに、低レベルの-XX
フラグは唯一のオプションではありませんか?私は、JVM上のこのような低レベルのものにどう対処するのが良いかについてのヒントを感謝します。そして、いいえ、この質問は、時期尚早の最適化によって動機付けされていません! :)
編集:私が欲しいもののいくつかは-XX:+LogCompilation
によって与えられていると思いますが、人々がこの種の活動のための一般的なヒントとツールを持っているかどうかはまだ不思議です。
この話は、JVMの内部を視覚化する方法に関するいくつかの情報を提供します。http://www.infoq.com/presentations/Visualizing-Java-GC – sschaef