Использование нескольких ядер / процессоров при компиляции Java - PullRequest
26 голосов
/ 16 сентября 2010

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

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

Ответы [ 6 ]

17 голосов
/ 16 сентября 2010

Я не знаю ни одного способа заставить муравья самому эффективно использовать несколько ядер.Но вы можете указать ant использовать Eclipse Compiler , который поддерживает многопотоковую компиляцию встроенный.

2 голосов
/ 16 сентября 2010

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

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

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

1 голос
/ 16 сентября 2010

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

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

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

0 голосов
/ 13 февраля 2019

Я предполагаю, что это может не сильно помочь, потому что javac может извлекать все файлы из памяти, и если он должен делать это с несколькими процессами, это просто удваивает усилия. Однако, если вы хотите скомпилировать два довольно отдельных фрагмента кода Java, вы можете просто сделать:

#!/usr/bin/env bash

javac file1.java &
javac file2.java &
javac file3.java &

wait;

если 3 файла имеют в основном разные зависимости, то это может сэкономить время, если зависимости перекрываются, то, вероятно, не сэкономит много времени.

0 голосов
/ 27 января 2016

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

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

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

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

0 голосов
/ 16 сентября 2010

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

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

...