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