GraalVm的反射配置辅助工具agentlib配置及使用

 更新时间:2022年02月23日 08:40:50   作者:kl  
这篇文章主要为大家介绍了GraalVm的反射配置辅助工具agentlib的配置文件及使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

前言

Graalvm通过静态分析提前编译来为Java应用程序构建高度优化的本机可执行文件,这就需要在编译时就知道所有的程序类型,而java中的反射、动态代理等功能,在编译时不确定具体的类型,所以在使用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提供了一个代理,该代理可以跟踪常规Java VM上执行动态功能的所有使用情况。可以在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:按照此配置中的指定,每隔几秒钟执行一次定期写入。仅支持大于零的整数值。
  • 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

在执行期间,代理与Java VM交互以拦截所有查找类,方法,字段,资源或请求代理访问的调用。然后,代理生成的文件jni-config.json,reflect-config.json,proxy-config.json、resource-config.json在指定的目录输出。生成的文件是JSON格式的独立配置文件,其中包含所有拦截的动态访问。

在使用agentlib生成配置时,建议将应用的测试用例全部跑一边,让应用覆盖到所有的业务接口,不然,生成的配置可能覆盖不到所有的反射类

配置文件使用

通过将生成的配置文件放置在项目的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目录下执行gu install native-image安装好native-image环境后才行

以上就是GraalVm的反射配置辅助工具agentlib的详细内容,更多关于GraalVm的反射配置辅助工具agentlib的资料请关注脚本之家其它相关文章!

相关文章

  • 程序包org.springframework不存在的解决办法

    程序包org.springframework不存在的解决办法

    这篇文章主要介绍了程序包org.springframework不存在的解决办法,在使用IDEA创建SpringBoot项目时,刚打开无法正常运行,本文通过图文结合的方式给大家介绍的非常详细,具有一定参考价值,需要的朋友可以参考下
    2024-07-07
  • idea中不用git解除关联的方式

    idea中不用git解除关联的方式

    IntelliJ IDEA是一款高效的Java编程环境,提供智能编码辅助、J2EE、Ant等集成,支持本地和远程调试,本文讲述了如何在IDEA中解除版本控制和删除.git文件夹,帮助开发者更好地管理项目设置和提升开发效率
    2024-10-10
  • 详解springboot之jackson的两种配置方式

    详解springboot之jackson的两种配置方式

    这篇文章主要介绍了详解springboot之jackson的两种配置方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Java 实战练习之网上电商项目的实现

    Java 实战练习之网上电商项目的实现

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+vue+Springboot+ssm+mysql+maven+redis实现一个网上电商项目,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • SpringBoot异常错误页面实现方法介绍

    SpringBoot异常错误页面实现方法介绍

    在项目访问的时候我们经常会发生错误或者页面找不到,比如:资源找不到404,服务器500错误,默认情况下springboot的处理机制都是去跳转内部的错误地址:/error 和与之对应的一个错误页面
    2022-09-09
  • activiti获取流程图实例

    activiti获取流程图实例

    这篇文章主要介绍了activiti获取流程图的方法,需要的朋友可以参考下
    2014-08-08
  • Maven Spring jar包启动报错问题解决方案

    Maven Spring jar包启动报错问题解决方案

    maven 编译jar包,放在linux服务器启动不起来,提示:xxxx-0.0.1-SNAPSHOT.jar中没有主清单属性,接下来通过本文给大家分享问题原因及解决方案,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • 详解Spring Boot 属性配置和使用

    详解Spring Boot 属性配置和使用

    本篇文章主要介绍了详解Spring Boot 属性配置和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java中BeanUtils.copyProperties()详解及应用场景

    Java中BeanUtils.copyProperties()详解及应用场景

    BeanUtils.copyProperties()是Apache Commons BeanUtils提供的方法,用于Java对象间属性的复制,特别适用于DTO、VO和Entity之间的数据传递,这篇文章主要介绍了Java中BeanUtils.copyProperties()详解及应用场景的相关资料,需要的朋友可以参考下
    2024-09-09
  • java基于递归算法实现汉诺塔问题实例

    java基于递归算法实现汉诺塔问题实例

    这篇文章主要介绍了java基于递归算法实现汉诺塔问题,结合具体实例形式分析了java递归算法的实现与使用技巧,需要的朋友可以参考下
    2017-07-07

最新评论