コンパイルされたメソッドに関するログ情報を提供する利用可能なフラグがあります。コンパイルされなかったメソッドと、コンパイルされなかった理由に関する情報はどこにありますか?ホットスポットコンパイラがどのように決定を下すか、特定のメソッドをコンパイルしない理由を確認できると、JVMをよりよく理解でき、より良いコードを記述して、メソッドの一部を最適化できるようになります。誰かがこのテーマについて何か考えを持っていますか?
2 に答える
ごとに: http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html
-XX:+PrintCompilationは、Hotspot が JIT コンパイルすることを決定した各 Java メソッドの名前を出力します。リストには通常、最初に一連のコア Java クラス メソッドが表示され、次にアプリケーション内のメソッドに変わります。
私の個人的な信念は、これはあなたの多くの時間を奪うことになるということです. ベスト プラクティスとある程度の常識を使用してコーディングし、パフォーマンスが問題になる場合は、プロファイリングします。あなたはうまくやるべきです。
答えは、十分な回数実行されていない場合、メソッドがコンパイルされない可能性があるということです。ネイティブ コード キャッシュは限られているため、すべてのメソッドをコンパイルするのは非生産的です。コンパイルされた多数のメソッドで終わる可能性がありますが、重要なメソッドがキャッシュ サイズに収まらなくなります。
正確な数値はリリースごとに異なりますが、Java を実行すると、 (値が 2000 の) (値が 15000 の)-XX:+PrintFlagsFinal
など、微調整できるすべての設定が表示されます。したがって、メソッドを 2000 回以上呼び出さない場合は、インタープリターを使用して処理します。Tier3CompileThreshold
Tier4CompileThreshold
JIT 条件下でプロファイリングを実行する場合は、その利点を確認するためにメソッドを呼び出すかなりの回数のループを実行するか、JMHなどのプロファイリング ハーネスを使用してプロファイリングを適切に実行する必要があります。