2010-09-16 12 views
26

Uso un desktop con otto core per creare un'applicazione Java utilizzando Ant (tramite una destinazione javac). C'è un modo per accelerare la compilazione usando più di un thread o processo?Utilizzo di più core/processori durante la compilazione di Java

So che posso eseguire diverse attività Ant in parallelo, ma non penso che questo possa essere applicato a un singolo target di compilazione o no?

+2

vedere la domanda relativa qui: http://stackoverflow.com/questions/523575/is-there-a-way-to-improve-multicore-multiprocessor-performance-of-the-java-com – Elijah

risposta

17

Non conosco alcun modo per dire a una formica stessa di fare un uso efficace di più core. Ma you can tell ant to use the Eclipse Compiler, che ha il supporto per multithreaded compilation integrato.

+0

Ecco un bel articolo sul blog [Eseguendo il compilatore Java di Eclipse con Ant] (http://owenou.com/2009/11/18/running-eclipse-java-compiler-with-ant.html). – sschuberth

+1

Utilizzo di Intellij 2017.1.3 con JDK 1.8 javac risulta essere più veloce del compilatore Eclipse in entrambe le istanze: le build parallele attivate e disattivate. Con esso sul nostro progetto ci vogliono circa 23 secondi per una ricostruzione con Javac e ~ 27 secondi per una ricostruzione con eclipse copmiler - strano come è un processore i7 a 4 core. – Volksman

1

The documentation sembra indicare che è improbabile che funzioni correttamente con javac.

Chiunque cerchi di correre grandi sequenze di attività Ant in parallelo, come javadoc e javac, allo stesso tempo, è implicitamente assumendo il compito di individuare e fissare tutti i bug di concorrenza i compiti che essi corrono.

Di conseguenza, mentre questa attività ha degli usi, dovrebbe essere considerata un'attività avanzata che dovrebbe essere utilizzata in determinate situazioni di elaborazione batch o di test, piuttosto che un semplice trucco per accelerare i tempi di costruzione su una CPU a più vie.

+0

upvote, anche dal doc: 'Le attività di terze parti possono essere o meno thread-safe, e alcune delle attività principali di Ant, come ad esempio non sono sicuramente rientranti. – VolkerK

2

Finché il javac che si sta chiamando non utilizza tutti i core, non importa ciò che si dice in Ant. È possibile utilizzare l'attributo compiler per definire quale compilatore java deve essere utilizzato per l'attività.

Se si dispone di più destinazioni di costruzione, è possibile utilizzare fork=yes per eseguire le destinazioni esternamente.

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

+3

+1. Voglio solo aggiungere che attualmente 'javac' è single-threaded (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6629150) e non è un compito banale farlo diventare multi-thread (http : //blogs.sun.com/jjg/entry/towards_a_multi_threaded_javac). –

0

Non per quanto ne so. Il compilatore Eclipse ha un lavoro fatto per accelerare l'uso di più core, ma non compra quanto vorresti.

La domanda è, si può vivere con la compilazione incrementale per lo sviluppo e ricompilare solo quelli che sono stati modificati? La ricostruzione completa può quindi essere lasciata al server di build.

0

È possibile utilizzare Buck Build per aumentare la velocità di generazione e utilizzare più core.

In poche parole:

Buck è un sistema di generazione sviluppato e utilizzato da Facebook. Incoraggia lo alla creazione di piccoli moduli riutilizzabili composti da codice e risorse e supporta una varietà di lingue su molte piattaforme.

Buck crea artefatti indipendenti in parallelo per sfruttare i più core sulla macchina. Inoltre, riduce i tempi di costruzione incrementali di tenendo traccia dei moduli non modificati in modo da ricostruire il set minimo di moduli .

Problemi correlati