Подтвердить что ты не робот

Использование нескольких ядер/процессоров при компиляции Java

Я использую рабочий стол с восемью ядрами для создания приложения Java с помощью Ant (через цель javac). Есть ли способ ускорить компиляцию, используя несколько потоков или процессов?

Я знаю, что я могу запускать несколько задач Ant параллельно, но я не думаю, что это может быть применено к одной цели компиляции или не так ли?

4b9b3361

Ответ 2

Пока javac, который вы вызываете, не использует все ядра, на самом деле не имеет значения, что вы говорите в Ant. Вы можете использовать атрибут compiler, чтобы определить, какой java-компилятор должен использоваться для задачи.

Если у вас есть несколько целей построения, вы можете использовать fork=yes для выполнения цели (ов) извне.

http://ant.apache.org/manual/Tasks/javac.html#compilervalues

Ответ 3

Документация, похоже, указывает на то, что она вряд ли будет работать правильно с javac.

Любой, кто пытается запускать большие последовательности задач Ant параллельно, например, javadoc и javac в одно и то же время, неявно принимает на себя задачу определения и исправления всех concurrency ошибок в задачах, которые они выполняют.

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

Ответ 4

Не знаю, насколько я знаю. У компилятора Eclipse есть некоторая работа, направленная на ускорение работы с использованием нескольких ядер, но она не покупает столько, сколько вы, возможно, захотите.

Вопрос: можете ли вы жить с инкрементной компиляцией для разработки и перекомпилировать только те, которые изменились? Полная перестройка может быть оставлена ​​на сервере сборки.

Ответ 5

Вы можете использовать Buck Build, чтобы увеличить скорость сборки и использовать несколько ядер.

В двух словах:

Buck - это система построения, разработанная и используемая Facebook. Он поощряет создание небольших, многоразовых модулей, состоящих из кода и ресурсов и поддерживает множество языков на многих платформах.

Buck создает независимые артефакты параллельно, чтобы воспользоваться несколькими на вашей машине. Кроме того, он уменьшает время нарастания следя за неизменными модулями, чтобы минимальный набор модулей восстанавливается.