Instrumentation:
classFileTransformer: 提供自定义字节码转换方法,transfer方法在类被加载 重定义的时候被调用
- JavaAgent
- 获取所有已经加载过的类
- 获取所有已经初始化的类(执行过clinit)
- 获取某个对象大小
- 将某个jar加入到bootstrap classpath作为高优先级被bootstrapClassLoader加载
- 将某个jar加入到classpath里供AppClasloard加载
- 设置某些native方法前缀,在查找native方法的时候做规则匹配
- 使用
- 自己写的agent打包成jar
- 启动命令 java -javaagent:D:\tool_software\myagent.jar=param=someparam -jar 项目jar
- javaagent 指定装备jar路径
- java.lang.instrument 装配API
- Instrumentation
-
提供装备Java代码的服务方法(修改字节码机制),启动Agent时会传入premain或者agentmain方法
premain 和 agentmain区别: 用命令行 -javaagent 在程序启动前处理的 premain 在程序启动后处理的 agentmain
- ClassFileTransformer
- 需要一个它的实现类,以进行