簡體   English   中英

可以將jaotc(Java提前編譯器)與jlink(模塊匯編器/優化器創建運行時映像)一起使用嗎?

[英]Can you use jaotc (Java Ahead-of-Time Compiler) with jlink (module assembler/optimizer to create runtime images)?

目標是:

  1. 創建一個具有自己的精簡JRE(最小化大小)的運行時映像-這就是jlink給我們的

  2. 創建本機可執行庫,而不是使用字節碼(縮短加載時間,並希望消除混淆的需求)-這就是jaotc給我們的

但是,沒有任何好的文檔可以將兩者聯系起來。 處理這兩種流程似乎有許多相互矛盾的方法。

是否可以用jlink構建使用jaotc生成的二進制文件的運行時映像?

並不是的。 既不JEP-295 (jaotc)提到jlink ,也不JEP-282 (JLINK)提到jaotc

但是,由於jlink只會在您的應用程序代碼中生成精簡的JRE(但它仍然是JRE!),因此可以告訴它使用所需的AOT版本的庫。

我決定遵循的程序來生成本地AOT lib中的java.base在JEP-295描述模塊,然后改變了jlink在-生成發射bin/my-app通過設置JLINK_VM_OPTIONS如下:

JLINK_VM_OPTIONS=-XX:AOTLibrary=./libjava.base-coop.so

然后,我使用time bin/my-app運行啟動器,該啟動器針對localhost上的服務器發出HTTP請求(以避免網絡延遲),然后打印完整的HTTP響應。

帶AOT大約需要410毫秒,而沒有AOT則需要210毫秒!

為了確認AOT是否被正確拾取,我添加了一些診斷標志:

JLINK_VM_OPTIONS="-XX:+UnlockDiagnosticVMOptions -XX:AOTLibrary=./libjava.base-coop.so -XX:+UseAOTStrictLoading"

它沒有顯示任何錯誤或警告,因此我相信我沒有犯任何可能使結果產生偏差的錯誤。

總之,至少在我的情況下,混合jlinkjaotc似乎沒有產生積極的影響,但要注意的是,在jaotc JEP他們說:

AOT compilation of any JDK modules, classes, or of user code,
is experimental and not supported in JDK 9

所以,我要說判斷還為時過早(2018年5月)...讓他們有時間完善這種機制,並希望他們能夠實現更多的改進。

目前,加快應用程序速度的更可行的方法可能是使用GraalVM及其native-image命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM