termino - Usando múltiples núcleos/procesadores al compilar Java
multihilos java (5)
Uso un escritorio con ocho núcleos para construir una aplicación Java usando Ant (a través de un objetivo javac). ¿Hay una manera de acelerar la compilación utilizando más de un hilo o proceso?
Sé que puedo ejecutar varias tareas Ant en paralelo, pero no creo que esto pueda aplicarse a un solo objetivo de compilación, ¿o no?
No conozco ninguna forma de hacerlo para hacer un uso efectivo de múltiples núcleos. Pero puede decirle a ant que use el compilador Eclipse , que es compatible con la compilación multiproceso integrada.
No tan lejos como sé. El compilador de Eclipse ha realizado algunos trabajos para acelerar el uso de múltiples núcleos, pero no compra tanto como probablemente desearía.
La pregunta es, ¿puedes vivir con una compilación incremental para el desarrollo, y solo recompilar aquellos que cambiaron? La reconstrucción completa se puede dejar al servidor de compilación.
Puede usar Buck Build para aumentar la velocidad de construcción y utilizar múltiples núcleos.
En una palabra:
Buck es un sistema de compilación desarrollado y utilizado por Facebook. Fomenta la creación de módulos pequeños y reutilizables que consisten en código y recursos, y admite una variedad de idiomas en muchas plataformas.
Buck construye artefactos independientes en paralelo para aprovechar los múltiples núcleos de su máquina. Además, reduce los tiempos de construcción incrementales al realizar un seguimiento de los módulos sin cambios para que se reconstruya el conjunto mínimo de módulos.
La documentación parece indicar que es poco probable que funcione correctamente con javac
.
Cualquiera que intente ejecutar grandes secuencias de tareas Ant en paralelo, como javadoc y javac al mismo tiempo, está asumiendo implícitamente la tarea de identificar y corregir todos los errores de concurrencia de las tareas que ejecutan.
En consecuencia, si bien esta tarea tiene usos, debe considerarse una tarea avanzada que se debe usar en ciertas situaciones de procesamiento por lotes o de prueba, en lugar de ser un truco fácil para acelerar los tiempos de compilación en una CPU multipista.
Mientras el javac al que está llamando no utilice todos los núcleos, en realidad no importa lo que diga en Ant. Puede usar el atributo compiler
para definir qué compilador java se debe usar para la tarea.
Si tiene varios objetivos de compilación, puede usar fork=yes
para ejecutar el (los) objetivo (s) externamente.
http://ant.apache.org/manual/Tasks/javac.html#compilervalues