簡體   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