java.lang.instrument.Instrumentation是监测运行在JVM程序的Java API,利用Instrumentation我们可以实现如下功能:
- 动态添加或移除自定义的
ClassFileTransformer(addTransformer/removeTransformer),JVM会在类加载时调用Agent中注册的ClassFileTransformer; - 动态修改
classpath(appendToBootstrapClassLoaderSearch、appendToSystemClassLoaderSearch),将Agent程序添加到BootstrapClassLoader和SystemClassLoaderSearch(对应的是ClassLoader类的getSystemClassLoader方法,默认是sun.misc.Launcher$AppClassLoader)中搜索; - 动态获取所有
JVM已加载的类(getAllLoadedClasses); - 动态获取某个类加载器已实例化的所有类(
getInitiatedClasses)。 - 重定义某个已加载的类的字节码(
redefineClasses)。 - 动态设置
JNI前缀(setNativeMethodPrefix),可以实现Hook native方法。 - 重新加载某个已经被JVM加载过的类字节码
retransformClasses)。
Instrumentation类方法如下:
**
