2010-11-18 2 views
10

У меня есть профиль Maven для Java-проекта, который активируется при выполнении окончательной сборки на сервере Hudson CI.Оптимизация компилятора Java во время сборки Maven?

В настоящее время только настройка Этого профиля является компилятором плагина 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-файла, но значительно затруднит отслеживание производственных проблем, потому что у вас не будет номеров строк в трассировке стека.


Одна вещь, которую я бы указать это параметры совместимости JVM:

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

Вы говорите, что оставить символы отладки там не повредит производительность? Будет выполнять настройки v1.6. – HDave

+3

@HDave - информация отладки хранится в LineNumberTable и LocalVariableTable в файле .class (см. 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

Для нашей сборки на основе Maven я не использую <debug>false</debug> вместо этого я настройки параметров отладки с <debuglevel/>, который позволяет гораздо более тонкий контроль {см. javac опция -g}.

+0

Я пробовал это и задал следующий вопрос: http://stackoverflow.com/questions/4220083/ установка-Maven-Java-компилятор отлаживать к ложно-делает-не-удалить строки номер стола – HDave

Смежные вопросы