cat全链路监控_全链路监控基石之java探针技术学习与实践

本文探讨了JavaAgent技术,它是全链路监控的关键,允许在JVM加载类之前或运行时修改字节码。通过JVMTI接口,JavaAgent可以实现预主方法(premain)、附加方法(Agent_OnAttach)等功能。文章还介绍了如何编写和实践JavaAgent,以及使用如Byte Buddy和Javassist等字节码工具进行代码生成和修改。此外,讲解了JavaAgent的其他功能,如获取已加载和初始化的类、对象大小等。
摘要由CSDN通过智能技术生成

一、JavaAgent

启动时加载的 JavaAgent 是 JDK1.5 之后引入的新特性,提供了在 JVM 将字节码文件读入内存之后,JVM 使用对应的字节流在 Java 堆中生成一个 Class 对象之前,可以对其字节码进行修改的能力,从而 JVM 也将会使用用户修改过之后的字节码进行 Class 对象的创建。

  • 可以在加载 class 文件之前做拦截,对字节码做修改
  • 可以在运行期对已加载类的字节码做变更,但是这种情况下会有很多的限制,后面会详细说
  • 还有其他一些小众的功能
    • 获取所有已经加载过的类
    • 获取所有已经初始化过的类(执行过 clinit 方法,是上面的一个子集)
    • 获取某个对象的大小
    • 将某个 jar 加入到 bootstrap classpath 里作为高优先级被 bootstrapClassloader 加载
    • 将某个 jar 加入到 classpath 里供 AppClassloard 去加载
    • 设置某些 native 方法的前缀,主要在查找 native 方法的时候做规则匹配
c4d92e19a20b9e44f6477e0f62719817.png

JVM Tool Interface

JVMTI 是 JVM 暴露出来的一些供用户进行自定义扩展的接口集合,每当 jvm 执行到一些特定的逻辑的时间,就会去进行触发这些回调接口,用户就恰好可以在此回调接口之中做一些自定义逻辑。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值