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