GraalVm的反射配置輔助工具agentlib配置及使用
前言
Graalvm通過靜態(tài)分析提前編譯來為Java應用程序構(gòu)建高度優(yōu)化的本機可執(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工具
為了更方便地準備這些配置文件,GraalVM提供了一個代理,該代理可以跟蹤常規(guī)Java VM上執(zhí)行動態(tài)功能的所有使用情況。可以在GraalVM的 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í)行一次定期寫入。僅支持大于零的整數(shù)值。
- config-write-initial-delay-secs:第一次寫入的秒數(shù)。僅支持大于或等于零的整數(shù)值。僅當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格式的獨立配置文件,其中包含所有攔截的動態(tài)訪問。
在使用agentlib生成配置時,建議將應用的測試用例全部跑一邊,讓應用覆蓋到所有的業(yè)務接口,不然,生成的配置可能覆蓋不到所有的反射類
配置文件使用
通過將生成的配置文件放置在項目的resources/META-INF/native-image/類路徑上的目錄中使其生效,如果在quarkus中使用,還可以通過添加如下的配置參數(shù)使配置生效:
quarkus.native.additional-build-args =-H:ResourceConfigurationFiles=resources-config.json
第一種方案是GraalVm提供的默認的配置加載路徑,第二種方式是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的詳細內(nèi)容,更多關(guān)于GraalVm的反射配置輔助工具agentlib的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
程序包org.springframework不存在的解決辦法
這篇文章主要介紹了程序包org.springframework不存在的解決辦法,在使用IDEA創(chuàng)建SpringBoot項目時,剛打開無法正常運行,本文通過圖文結(jié)合的方式給大家介紹的非常詳細,具有一定參考價值,需要的朋友可以參考下2024-07-07
Java 實戰(zhàn)練習之網(wǎng)上電商項目的實現(xiàn)
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+vue+Springboot+ssm+mysql+maven+redis實現(xiàn)一個網(wǎng)上電商項目,大家可以在過程中查缺補漏,提升水平2021-11-11
Java中BeanUtils.copyProperties()詳解及應用場景
BeanUtils.copyProperties()是Apache?Commons?BeanUtils提供的方法,用于Java對象間屬性的復制,特別適用于DTO、VO和Entity之間的數(shù)據(jù)傳遞,這篇文章主要介紹了Java中BeanUtils.copyProperties()詳解及應用場景的相關(guān)資料,需要的朋友可以參考下2024-09-09

