一起看看JavaAgent到底是干啥用的

JavaAgent 简介
  • 定义: JDK提供的一种能力,允许开发者在运行时对已有class代码进行注入和修改。
  • 用途: 增强和修改类执行,如IntelliJ IDEA使用JavaAgent增强JVM行为实现调试功能。
JavaAgent 工作原理
  • premain 方法: JavaAgent的入口点,接收agent参数和Instrumentation实例。
  • transform 方法: 允许在类加载前修改字节码,使用字节码操作库(如ASM、Byte Buddy)。
实践 JavaAgent
  • 步骤:
    1. 实现 ClassFileTransformer 接口: 重写 transform 方法,实现字节码修改。
    2. 编写 MyAgent: 作为代理入口类,注册 ClassFileTransformer
    3. 配置Jar信息: 打包代码为Jar包,配置MANIFEST.MF指定启动类和相关属性。
方法执行耗时统计实现
  • CostTransformer: 限定只对特定类名后缀的类进行操作,实现方法耗时的统计。
    • 时间记录: 在方法执行前后插入时间记录代码,计算耗时。
    • 代码示例: 使用javassist库对UserControllertestCostTime方法进行字节码修改。
代理入口类 (MyAgent)
  • premain 方法: 注册 CostTransformer 实例到Instrumentation实例。
  • 注意: agentmain通常用于JavaAgent附着启动,本文主要介绍 premain
Jar包配置
  • MANIFEST.MF: 配置文件,指定JavaAgent的启动类和属性。
    • Premain-Class: 指定入口类。
    • Can-Redefine-ClassesCan-Retransform-Classes: 允许类重定义和重转换。
使用JavaAgent
  • 启动方式:
    • 使用 -javaagent 选项启动Java应用程序。
    • 使用Java Attach API在运行时附加代理。
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值