JAVA的Instrumentation类使用介绍

方向介绍

Instrumentation 是java1.6才有的,跟aop有点像,只不过这是java提供给针对JVM对外接口的开发类,所以非常灵活,也更细粒度,说白了就是性能好;

原理介绍

instrument的底层实现依赖于JVMTI(JVM Tool Interface),它是JVM暴露出来的一些供用户扩展的接口集合,JVMTI是基于事件驱动的,JVM每执行到一定的逻辑就会调用一些事件的回调接口(如果有的话),这些接口可以供开发者去扩展自己的逻辑。JVMTIAgent是一个利用JVMTI暴露出来的接口提供了代理启动时加载(agent on load)、代理通过attach形式加载(agent on attach)和代理卸载(agent on unload)功能的动态库。而instrument agent可以理解为一类JVMTIAgent动态库,别名是JPLISAgent(Java Programming Language Instrumentation Services Agent);
里面的类其实没几个,主要是调用了C的源码,所以源码就不介绍了;底层使用sokcet进行进程通讯;

Instrumentation提供了两种使用方式

使用方法查看这篇博客

第一种是通过JVM启动参数的形式: -javaagent(也就是单独建立一个项目编写好代码之后打成jar包供另一个使用程序通过代理形式引入.),启动时处理

一般我们会命名premain函数处理

使用方法查看这篇博客

第二种与第一种有些相似,但它是运行是处理;不需要通过启动参数,通过attach工具激活知道代理即可

一般我们会命名agentmain函数处理

你可能感兴趣的:(Instrumentation)