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 生命周期仍然是排查问题的基础。