繁体   English   中英

在编译Java时使用多个核心/处理器

[英]Using multiple cores/processors when compiling Java

我使用具有八个内核的桌面来使用Ant(通过javac目标)构建Java应用程序。 有没有办法通过使用多个线程或进程来加速编译?

我知道我可以并行运行几个Ant任务,但我不认为这可以应用于单个编译目标,或者它可以吗?

我不知道有什么方法可以告诉ant本身有效使用多个内核。 但是你可以告诉ant使用Eclipse Compiler ,它支持内置的多线程编译

只要您调用的javac不使用所有内核,您在Ant中所说的内容并不重要。 您可以使用compiler属性来定义应该为任务使用哪个java编译器。

如果您有多个构建目标,则可以使用fork=yes在外部执行目标。

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

文档似乎表明它不太可能与javac一起正常工作。

任何试图并行运行大型Ant任务序列的人,例如javadoc和javac,都隐含地承担了识别和修复所有并发错误的任务。

因此,虽然此任务有用,但应将其视为应在某些批处理或测试情况下使用的高级任务,而不是加速多路CPU上构建时间的简单技巧。

您可以使用Buck Build来提高构建速度并利用多个核心。

简而言之:

Buck是Facebook开发和使用的构建系统。 它鼓励创建由代码和资源组成的小型可重用模块,并在许多平台上支持各种语言。

Buck可以并行构建独立的工件,以利用机器上的多个内核。 此外,它通过跟踪未更改的模块来减少增量构建时间,从而重建最小的模块集。

不是我所知道的。 Eclipse编译器已经完成了一些工作来加速使用多个内核,但它并没有像您希望的那样购买。

问题是,您是否可以使用渐进式编译进行开发,并且只重新编译那些已更改的内容? 然后可以将完全重建留给构建服务器。

我认为它可能没有多大帮助,因为javac可以将内存中的所有文件拉出来,如果它必须通过多个进程执行此操作,那么它只需要加倍努力。 但是,如果要编译两个相当独立的Java代码,那么您可以这样做:

#!/usr/bin/env bash

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

wait;

如果3个文件的依赖关系大多不同,那么它可能会节省时间,如果依赖关系重叠,那么它可能不会节省太多时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM