[英]Can you use jaotc (Java Ahead-of-Time Compiler) with jlink (module assembler/optimizer to create runtime images)?
目標是:
創建一個具有自己的精簡JRE(最小化大小)的運行時映像-這就是jlink給我們的
創建本機可執行庫,而不是使用字節碼(縮短加載時間,並希望消除混淆的需求)-這就是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"
它沒有顯示任何錯誤或警告,因此我相信我沒有犯任何可能使結果產生偏差的錯誤。
總之,至少在我的情況下,混合jlink
和jaotc
似乎沒有產生積極的影響,但要注意的是,在jaotc
JEP他們說:
AOT compilation of any JDK modules, classes, or of user code,
is experimental and not supported in JDK 9
所以,我要說判斷還為時過早(2018年5月)...讓他們有時間完善這種機制,並希望他們能夠實現更多的改進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.