2010-11-18 21 views
10

Hudson CIサーバーで最終ビルドを実行するときにアクティブ化されるJavaプロジェクト用のMavenプロファイルがあります。次のようにMavenビルド中にJavaコンパイラを最適化しますか?

現在、このプロファイルの唯一のカスタマイズは、Mavenのコンパイラプラグインにある:

   <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <debug>false</debug> 
         <optimize>true</optimize> 
        </configuration> 
       </plugin> 

は最終ビルドがパフォーマンスを最大化するためにやるべきJavaコンパイラに、他の微調整や最適化がありますか?

答えて

17

Sun(Hotspot)JVM、すべての最適化はJVMで行われます。

したがって、<optimize>true</optimize>を指定すると何も起こりません。

そして、<debug>false</debug>を指定すると、単にデバッグシンボルが削除されます。 JARファイルのサイズは少し小さくなりますが、スタックトレースに行番号がないため、生産上の問題を追跡するのがずっと難しくなります。私たちのMavenベースのビルドのために

<source>1.6</source> 
<target>1.6</target> 
+0

デバッグシンボルをそこに残してもパフォーマンスが低下することはありませんか? v1.6の設定で行います。 – HDave

+3

@HDave - デバッグ情報は、.classファイルのLineNumberTableおよびLocalVariableTableに格納されます(http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.htmlを参照)。これは追加のメモリを消費する可能性がありますが、バイトコードとは別のため、実行のパフォーマンスに直接影響しません。 – Anon

+0

おねがいです...ありがとうございます。 – HDave

11

このようなことはしないでください。javacの最適化は、IIRCのかなりの期間無効になっています。基本的にJITはほぼすべての最適化を担当しており、実際にはjavacの最適化はであり、場合によってはが傷つきます。

あなたはパフォーマンスを調整するために探している場合は、別の場所になります。

  • あなたの実際のコードあなたが上で実行していると仮定すると
  • VMオプション(例えばGCはチューニング)
+0

パフォーマンスが問題でない限り、特にJITが実際に非常に優れているため、最適化はお勧めしません。 – extraneon

+0

@extraneon:私のポイント最適化が積極的に*傷ついていないので、基本的には削除されました。 –

+0

私は実際にコードの最適化とGCの最適化を意味しました。コードの最適化はコードの読みやすさを低下させる可能性があり、GCオプションは知識のない人にとって驚くかもしれません。 – extraneon

1

私が代わりに私が可能になる<debuglevel/>とデバッグオプションを設定してい<debug>false</debug>を使用していない:私は指定します


ことの一つは、JVMの互換性設定でありますはるかに細かい制御{javacオプション-g参照}。

+0

私はこれを試して、これに関するフォローアップの質問があります:http://stackoverflow.com/questions/4220083/設定-maven-java-compiler-debug-to-false-does-not-remove-line-number-table – HDave

関連する問題