4

私が現在興味を持っている問題は、コードの一部をプロファイリング/最適化することです。Java を使用したプロファイリングの一般的な推奨事項は、「実行」、「ホットスポット JIT コンパイラーがジョブを実行するまでしばらく待つ」、「テストを繰り返す」です。

だから質問は

  • ホットスポットが開始され、ジョブが完了するまでどのくらい待つ必要がありますか?
  • CPUが(他のスレッドによって)かなり飽和しているときにJITは実行されますか?- 実際には、プロセスが常に CPU に最大 100% の負荷をかけることがあります。
  • 「ホットスポット」を特定するには、同じコードを何回実行する必要がありますか?
  • どういうわけか魔法のように(おそらくOracle JVMの独自のAPIを使用して)特定のクラスのJITコンパイルをトリガーすることは可能ですか?
4

1 に答える 1

0

ホットスポットが開始され、ジョブが完了するまでどのくらい待つ必要がありますか?

約 10,000 回の呼び出し/反復と数ミリ秒。

CPUが(他のスレッドによって)かなり飽和しているときにJITは実行されますか?- 実際には、プロセスが常に CPU に最大 100% の負荷をかけることがあります。

はい、時間がかかる場合がありますが、CPU の 100% でテストを実行することは、通常は良い考えです。結果が本番環境で行うことを代表する可能性が低いためです。

「ホットスポット」を特定するには、同じコードを何回実行する必要がありますか?

可能な限りコードがウォームアップするまで待ちます。通常、現実的なテスト データ、高い CPU 使用率での数秒、適切なプロファイラーで十分です。

どういうわけか魔法のように(おそらくOracle JVMの独自のAPIを使用して)特定のクラスのJITコンパイルをトリガーすることは可能ですか?

それを十分な回数実行する以外はいいえ。クラスのコンパイルが早すぎると、コードが最適化されない可能性があります。コードは、使用方法に基づいて最適化されます。JRockit (これも Oracle が所有) には、そのような機能があります。

于 2013-01-28T22:27:52.967 に答える