Java Agent使用

参考文章
https://tech.meituan.com/2019/11/07/java-dynamic-debugging-technology.html
https://docs.oracle.com/en/java/javase/20/docs/specs/jvmti.html

基本使用

Java Agent提供了一种在加载字节码时对字节码进行修改的能力,有两种实现方式:

  1. 在应用启动之时,通过premain()方法来实现在应用启动时侵入
  2. 针对运行中的JVM,通过Attach API和agentmain()方法来实现侵入

premain

通过JVM参数-javaagent:*.jar启动应用。应用在启动时,会优先加载Java Agent,并执行premain()方法,这时部分的类都还没有被加载。此时,可以实现对新加载的类进行字节码修改,但如果premain()方法执行失败或者抛出异常,则JVM会被终止。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                    <manifestEntries>
                        <!--指定包含premain方法的类,需要配置为类的全路径名,必须配置-->
                        <Premain-Class>org.example.PreMainAgent</Premain-Class>
                        <!--是否可以重新定义class,默认为false,可选配置-->
                        <Can-Redefine-Classes>true</Can-Redefine-Classes>
                        <!--是否可以重新转换class,实现字节码替换,默认为false,可选配置-->
                        <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值