JVM

Java Agent 是什么

从 Instrumentation API 开始理解 JVM 运行时增强。

本文目录 3

生长中:代码样例正在 Java 21 环境中持续验证。

两个入口

Java Agent 可以在 JVM 启动时通过 premain 进入,也可以在 JVM 已经运行后通过 agentmain 附加。两条路径最终都围绕 Instrumentation 展开。

public final class TimingAgent {
    public static void premain(String arguments, Instrumentation instrumentation) {
        instrumentation.addTransformer(new TimingTransformer());
    }
}

转换发生在哪里

Transformer 接收类的字节表示,并有机会返回新字节。真正困难的部分不是“修改成功”,而是保持类加载、验证、性能和错误隔离都可控。

ByteBuddy 的位置

ByteBuddy 把底层字节码操作提升为更易组合的 API。它没有消除 JVM 规则,只是让匹配、建议和转换更容易表达。理解 Instrumentation 生命周期仍然是排查问题的基础。