2016-06-29 10 views
9

私のアプリケーションは、実行時にJavaコードを生成し、JavaCompiler APIを使用してコンパイルします。生成されるファイルの中には、数十万行に及ぶものもあります。私は、コマンドラインで生成されたコードに対してjavacコマンドを実行するか、JavaCompiler API経由でコンパイルするだけのアプリケーションを使用すると、これらのファイル(〜500)の多くをコンパイルすることができます2分以内に非常に大きいです。しかし、Tomcatサーバー上で実行しているときに私のアプリケーションを介してAPIを呼び出すと、コンパイル時間は12分(!!!)以上になります。JavaCompiler API - Tomcatで実行中のスローコンパイル

コンパイルのパフォーマンスを向上させる方法についてのご意見をお待ちしております。

ありがとうございます!

+0

私は理由を正確に私の指を置くことはできませんが、私は経由して、デフォルトのシステムのコンパイラを使用してから切り替えたときに'ToolProvider.getSystemJavaCompiler();'を呼び出すのではなく、EclipseのJDTコンパイラを使うと、物事が大幅にスピードアップしました。説明は喜んで答えとして受け入れられます。 – Jewels

+0

推測はeclipseにインクリメンタルコンパイラがあるので、毎回クリーンビルドを実行していません。しかしこれは間違っている可能性があります。また、主な質問 –

+0

にはjvmでjvisualvmを見てもらえません。javacはコンパイル全体を単一のスレッドで実行していますが、EclipseCompilerは '.java'ファイルをコンパイルするために多くのスレッドを起動します。 – Jewels

答えて

1

(スレッドまたはスレッドプール上の)最高値に、スレッドの優先順位を設定してください:

setPriority(Thread.MAX_PRIORITY); 
関連する問題