操作字节码就是在类加载或者运行过程中对类对应的字节码进行修改以增强其功能。
实现方式:
- 可以自定义类加载器,配合一些工具(如ASM,Javaasist)来修改它的byte[]数组
- 可以基于java agent机制,配合(如ASM,Javaasist)来修改它的byte[]数组
操作字节码增强功能:
- 获取所有已经加载过的类
- 获取所有已经初始化过的类(执行过clinit方法,是上面的一个子集)
- 获取某个对象的大小
- 将某个jar加入到bootstrap classpath里作为高优先级被bootstrapClassloader加载
- 将某个jar加入到classpath里供AppClassloard去加载
- 设置某些native方法的前缀,主要在查找native方法的时候做规则匹配