Instrumentation简介
2025年09月21日
Instrumentation简介
Instrumentation可译为插桩。Java Instrumentation API[1]是Java SE 5的新特性。使用Instrumentation,我们可以构建一个独立于应用程序的代理程序,即Java Agent程序,可在运行期间对类进行修改,在类加载之前拦截修改类的字节码,或在运行期间将已经加载的类进行修改再重新加载。这样的特性实际上提供了一种虚拟机级别支持的AOP实现方式[2]。
在Java SE 5版本中,使用Instrumentation只能实现在类加载之前修改类,并且只能通过在启动应用程序时配置javaagent参数指定agent程序jar包路径的方式使用。而Java SE 6针对这一情况作出了改进,在程序运行期间,main方法执行完成之后,可随时修改一个已经加载的类。通过使用Attach API可将一个agent程序附着到目标JVM进程上。
注释:
[1] Instrumentation API官方文档:https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/Instrumentation.html
[2] 《Instrumentation新功能》:https://www.ibm.com/developerworks/cn/java/j-lo-jse61/index.html