随笔 - 394  文章 - 0  评论 - 946  阅读 - 143万 

retransformClasses是因为agent虽然嵌入了,但是在虚拟机启动的时候,某些类比如thread,在javaagent启动之前就已经加载到了内存,javaagent也是类,在javaagent加载之前虚拟机需要加载一些必须的类来保证我的javaagent的运行,比如说thread,这个时候thread就没有被”穿上衣服“,即没有被transform修饰,也就不能被javaagent监控到,这个时候就需要retransformClasses重新加载,注意retransformClasses会让没有被”穿上衣服的类”穿上衣服“

 

//需要将业务类进行retransform一下,这样可以避免在transform执行的时候,找不到此类的情况
for (Class<?> clazz : classes) {
for (CodePadClassMethodEntity entity : codePadEntity.getEnhanceClasses().keySet()) {
if (clazz.getName().contains(entity.getClassName())) {
try {
inst.retransformClasses(clazz);
} catch (UnmodifiableClassException e) {
log.error("retransform class fail:" + clazz.getName(), e);
}
}
}
}
//进行增强操作
inst.addTransformer(new CodePadPluginBizInvoker(codePadEntity), true);
posted on   程序诗人  阅读(505)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2019-01-18 var that = this 小坑记
2016-01-18 物联网平台设计心得:管中窥豹之HeartBeat
2013-01-18 WCF chatroom源码解析
点击右上角即可分享
微信分享提示