Оптимизация компилятора Java во время сборки Maven?

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

В настоящее время настройка этого профиля только для плагина компилятора Maven следующим образом:

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

Есть ли какие-либо другие настройки или оптимизации для компилятора Java, которые должны быть сделаны для окончательной сборки, чтобы максимизировать производительность?

Ответ 1

Предполагая, что вы работаете в JVM Sun (Hotspot), вся оптимизация происходит в JVM.

Таким образом, указание <optimize>true</optimize> ничего не делает.

И указание <debug>false</debug> просто удаляет отладочные символы. Это немного уменьшит размер вашего JAR файла, но значительно затруднит отслеживание производственных проблем, потому что у вас не будет номеров строк в трассировке стека.


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

<source>1.6</source>
<target>1.6</target>

Ответ 2

Вы даже не должны этого делать - оптимизация в javac была отключена на некоторое время, IIRC. В основном JIT отвечает за почти всю оптимизацию, и оптимизация javac действительно вредит тому, что в некоторых случаях.

Если вы хотите настроить производительность, вы должны искать в другом месте:

  • Ваш фактический код
  • Параметры VM (например, настройка GC)

Ответ 3

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