[英]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.