JDK instrument 踩坑记录

class操作:define(类定义) 、redefine(类重新定义)、retransform(类重新转换);

class操作的原料:类定义字节码和transformer(类转换器);

transformer根据能不能redo分成两种。每种transformer都组成一条调用链,前一个的输出字节码数组是后一个的输入字节码数组。

define和redefine是都是先以类定义的字节码数组为参数调用不能redo的transformer链,再调用能redo的transformer链。

retransform就复杂了。首先明确的是,retransform只会调用能redo的transformer链。坑在调用这个链的字节码数组参数。下面是Javadoc

The input (via the classfileBuffer parameter) to the first transformer is:for new class definition, the bytes passed to ClassLoader.defineClass

for class redefinition, definitions.getDefinitionClassFile() where definitions is the parameter to Instrumentation.redefineClasses

for class retransformation, the bytes passed to the new class definition or, if redefined, the last redefinition, with all transformations made by retransformation incapable transformers reapplied automatically and unaltered; for details see Instrumentation.retransformClasses

我理解参数应该是类定义字节码或如果redefined,就是最后redefine的字节码(被不能redo的transformer转换后的)。

实际测试发现:针对同一个类,参数在Intrument第一次调用时就被确定了。分两种情况:第一次是调用retransform,则是define的字节码;第一次是调用redefine,则是redefine的字节码。注意,只有第一次调用的redefine能影响参数。

这与我对Javadoc 的理解不相符。这是bug还是我哪里弄错了?

java instrument_JDK instrument 踩坑记录相关推荐

  1. 第91课:SparkStreaming基于Kafka Direct案例实战和内幕源码解密 java.lang.ClassNotFoundException 踩坑解决问题详细内幕版本

    第91课:SparkStreaming基于Kafka Direct案例实战和内幕源码解密    /* * *王家林老师授课http://weibo.com/ilovepains */  每天晚上20: ...

  2. 使用Java读取 “Python写入redis” 的数据踩坑记录

    https://my.oschina.net/u/2338224/blog/3061507 使用Java读取 "Python写入redis" 的数据踩坑记录 https://seg ...

  3. sonar覆盖率怎么统计的_实战|Java 测试覆盖率 Jacoco插桩的不同形式总结和踩坑记录(上)...

    本文为霍格沃兹测试学院优秀学员关于 Jacoco 的小结和踩坑记录.测试开发进阶学习,文末加群. 一.概述 测试覆盖率是老生常谈的话题.因为我测试理论基础不是很好,这里就不提需求.覆盖率等内容,直奔主 ...

  4. mvn exec: java_实战|Java 测试覆盖率 Jacoco插桩的不同形式总结和踩坑记录(下)

    本文为霍格沃兹测试学院优秀学员关于 Jacoco 的小结和踩坑记录.测试开发进阶学习,文末加群. 六.注意事项汇总 修改 JAVA_OPTS 参数时,如果位置不对,可能造成代理无法启动. java - ...

  5. 微信退款 java工具类,微信支付中退款踩坑记录

    首先附上微信支付的开发者文档 其实这里所说的踩坑记录,无非就是微信在开发者文档上的写不太明确,也没有比较官方的demo,在此列出一个可行的demo,供大家下载使用. 主要问题就是在这几步解密上 微信的 ...

  6. Java 线上惨痛踩坑记录,你也一定遇到过

    线上问题年年有,今年特别多.记几次线上惨痛的踩坑记录,希望大家以史为鉴. 1. 包装类型自动解箱导致空指针异常 public int getId() { Integer id = null; retu ...

  7. Java线上惨痛踩坑记录,你也一定遇到过

    线上问题年年有,今年特别多.记几次线上惨痛的踩坑记录,希望大家以史为鉴. 1. 包装类型自动解箱导致空指针异常 public int getId() {Integer id = null;return ...

  8. TVM: Deep Learning模型的优化编译器(强烈推荐, 附踩坑记录)

    本文作者是阿莱克西斯,原载于知乎,雷锋网(公众号:雷锋网)获得授权转载. (前排提醒,本文的人文内容部分稍稍带有艺术加工,请保持一定的幽默感进行阅读) 关注我最近想法的同学应该知道我最近都在把玩 TV ...

  9. SpringBoot踩坑记录 Invalid bound statement (not found)引发的一些列问题

    SpringBoot踩坑记录 Invalid bound statement (not found)引发的一些列问题 当你开开心心搭建了一个SpringBoot项目,用插件生成了entity.dao. ...

  10. 转:android.support升级到androidx踩坑记录

    原文链接:android.support升级到androidx踩坑记录 - 简书 年前想着Google老大之前提醒过将项目升级到androidx,所以年前一通操作猛如虎把Android Studio唰 ...

最新文章

  1. PHP - 如何实现跨域
  2. Silverlight调用的JS方法返回对象数组的处理方法
  3. tensorflow 风格迁移
  4. a*算法流程图_学好流程控制结构轻松应对高考数学程序算法题
  5. 肝!Python 网络编程
  6. 关于服务器的入门知识整理
  7. JDK 下载相关资料
  8. 单人存档_R星:会为GTA做更多单人内容,steam圣诞特惠即将开启,2077坏档BUG,那个游戏重回steam销量榜,Epic喜加一...
  9. 检查库文件的rpath命令
  10. 斐波那契堆的C++实现
  11. 企业微信小程序(企业内部)怎么自定义工作台和通过中文名模糊查询到员工的个人信息和userid
  12. 计算机电子电路原理图,学看电路原理图入门知识积累 - 全文
  13. SPSS描述性统计分析
  14. 细粒度锁的实现之分级锁的设计实现
  15. set_set_switching_activity
  16. 自下而上和自上而下的注意力:不同的过程和重叠的神经系统 2014sci
  17. 通信专业实务(四)——互联网
  18. ClickHouse MergeTree表引擎和建表语句
  19. session和token鉴权
  20. ks8851网卡驱动在omap4460上的移植,发现开发板能发送数据,但是接受不到数据

热门文章

  1. 为什么使用LINUX(有点长,没耐心别看)大家自己体会
  2. 电路交换技术与包交换技术
  3. 多天线技术(MIMO)基础
  4. java实现第五届蓝桥杯出栈次序
  5. 手游天龙八部服务器注册上限,腾讯手游助手注册已达上限怎么办 | 手游网游页游攻略大全...
  6. Modern Effective C++
  7. html css字体特效,40款CSS+JS文字动画特效html源码
  8. mysql 多表左连接查询
  9. Python 读取/处理 s2k/$2k 文本文件
  10. 2022年QQ微信内置浏览器 UA 标识, Header 获取