GraalVm的反射配置輔助工具agentlib配置及使用
前言
Graalvm通過靜態(tài)分析提前編譯來為Java應用程序構建高度優(yōu)化的本機可執(zhí)行文件,這就需要在編譯時就知道所有的程序類型,而java中的反射、動態(tài)代理等功能,在編譯時不確定具體的類型,所以在使用GraalVm構建native image前需要通過配置列出反射可見的所有類型。反射的配置是一個json格式的文件。為了簡化這種反射的配置,GraalVm提供agentlib工具,來輔助生成這個配置文件
Reflection配置文檔:https://github.com/oracle/REFLECTION.md
agetnlib文檔:https://www.graalvm.org/docs/Native-Image/user/CONFIGURE
關于agentlib工具
為了更方便地準備這些配置文件,GraalVM提供了一個代理,該代理可以跟蹤常規(guī)Java VM上執(zhí)行動態(tài)功能的所有使用情況??梢栽贕raalVM的 java命令的命令行上啟用它,如:
./java -agentlib:native-image-agent=config-output-dir=/home/kl/graal/data/ -jar /home/kl/graal/app/kk-risk-model-0.0.1-runner.jar
config-output-dir配置好配置的輸出目錄,默認情況下,配置文件生成將在jvm停止后輸出,也可以通過添加配置,定期輸出,如
- config-write-period-secs:按照此配置中的指定,每隔幾秒鐘執(zhí)行一次定期寫入。僅支持大于零的整數值。
- config-write-initial-delay-secs:第一次寫入的秒數。僅支持大于或等于零的整數值。僅當config-write-period-secs大于零時啟用。
每個配置間使用逗號分隔,如:
./java -agentlib:native-image-agent=config-output-dir=/home/kl/graal/data/,config-write-period-secs=60,config-write-initial-delay-secs=5 -jar /home/kl/graal/app/kk-risk-model-0.0.1-runner.jar
在執(zhí)行期間,代理與Java VM交互以攔截所有查找類,方法,字段,資源或請求代理訪問的調用。然后,代理生成的文件jni-config.json,reflect-config.json,proxy-config.json、resource-config.json在指定的目錄輸出。生成的文件是JSON格式的獨立配置文件,其中包含所有攔截的動態(tài)訪問。
在使用agentlib生成配置時,建議將應用的測試用例全部跑一邊,讓應用覆蓋到所有的業(yè)務接口,不然,生成的配置可能覆蓋不到所有的反射類
配置文件使用
通過將生成的配置文件放置在項目的resources/META-INF/native-image/類路徑上的目錄中使其生效,如果在quarkus中使用,還可以通過添加如下的配置參數使配置生效:
quarkus.native.additional-build-args =-H:ResourceConfigurationFiles=resources-config.json
第一種方案是GraalVm提供的默認的配置加載路徑,第二種方式是Quarkus提供的配置加載方式,所有在quarkus中使用maven構建的話,可以在構建命令中看到你配置的指令,而第一種方案是看不到的,但是也是生效的。
ps:直接下載下來的graalvm sdk不包含如上功能,需要在graalvm的bin目錄下執(zhí)行gu install native-image安裝好native-image環(huán)境后才行
以上就是GraalVm的反射配置輔助工具agentlib的詳細內容,更多關于GraalVm的反射配置輔助工具agentlib的資料請關注腳本之家其它相關文章!
相關文章
Java swing實現(xiàn)支持錄音等功能的鋼琴程序
這篇文章主要為大家詳細介紹了Java swing實現(xiàn)鋼琴程序,支持錄音等功能的Java鋼琴源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06SpringCloud Netfilx Ribbon負載均衡工具使用方法介紹
Ribbon是Netflix的組件之一,負責注冊中心的負載均衡,有助于控制HTTP和TCP客戶端行為。Spring Cloud Netflix Ribbon一般配合Ribbon進行使用,利用在Eureka中讀取的服務信息,在調用服務節(jié)點時合理進行負載2022-12-12IDEA中l(wèi)og4j 無法輸出到本地 properties配置無效問題
這篇文章主要介紹了IDEA中l(wèi)og4j 無法輸出到本地 properties配置無效問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10