2012-04-29 5 views
2

可能性の重複:
Technique or utility to minimize Java “warm-up” time?スピード違反のJVMウォームアップ時間

私はJVMは、コードのサイズに応じて "ウォームアップ" するためにしばらく時間がかかります知っています。私の質問です:どのように見えるコードの可能な部分を指定することによって "ウォームアップ"プロセスをスピードアップするためにプログラマーが助けることができる方法はありますか?

+3

[同じ質問](http://stackoverflow.com/questions/1481853/technique-or-utility-to-minimize-java-warm-up-time) –

+0

私の提案を確認してくださいhttp://stackoverflow.com/questions/1481853/technique-or-utility-to-minimize-java-warm-up-time/10383192#10383192 - それはあなたのためにも可能です。 –

答えて

2

間接的にコードを多く呼び出すことができます。デフォルトの-xx:CompileThreshold=は10000です。したがって、重要なコードを何回も呼び出すことができます。 12,000回。

あなたは、コンパイルのしきい値を減らすことができますが、あなたはまだ同じ問題を抱えている、そのループは、コードをウォームアップしたい1000年の代わりに、10000

一つの理由は、それを最適化することであると言うことができるだけでなく、反復回数を減らすと、最適化の一部が実行されず、最適ではない呼び出しが発生する可能性があります(ただし必ずではありません)。

コードをウォームアップすると、準最適な方法で最適化し、JVMは後で最適化を再決定する可能性があります。

+0

オプションを低い番号に変更してみませんか? – assylias

+1

@assylias良い質問が、私の答えに追加されました。 –

+2

ピーター、私はこのアドバイスを与えることに本当に慎重だ。 CompileThresholdを調整することをお勧めします。インタラクションもあります。コードキャッシュがいっぱいになると、ユーザーは重要なメソッドをコンパイルすることを逃してしまうかもしれません(たとえば、Springアプリケーションの動作について考えるなど)。私たちはいくつかの実験をすべきです。 – kittylyst

0

先験的なコンパイラを考えてみてください。 gcjを使用すると、アプリケーションをビルドするときに一連のクラスをネイティブコードにコンパイルし、仮想マシンで実行時にロードされるクラスのみを実行できます。コンパイル終了後のパフォーマンスはあまり良くありません(特に、実行時にロードされるコードに多くの時間を費やした場合)が、実行時間が短いプログラムの場合は、オフセット以上のプリコンパイルの利点があります。

0

developerWorksには、Javaでのマイクロ・パフォーマンス測定について、本当に良いarticleがあります。それはまた、 "ウォームアップ"と他の関連するもののトピックをカバーしています。著者は、Javaのマイクロベンチマークのためのかなり良いフレームワークを実装しています。このフレームワークでは、JVMのウォーミングアップフェーズについても扱い、実際のテストが始まる前にそれをスピードアップして終了させようとしています。フレームワークのソースコードも利用できるので、これがどのように実装されているかを見ることができます。