当前位置: 首页 > ds >正文

java agent技术(二)

premain

premain发方法是在JVM启动的时候运行的,但是真正产生修改字节码的动作是在类被加载的时候发生的

public static void premain(String args, Instrumentation inst) {inst.addTransformer(new ClassFileTransformer() {@Overridepublic byte[] transform(...) {// 这里才是真正的“动作”}});
}

premain的主要作用是注册一个或多个ClassFileTransformer,但是这些transformer不会立刻执行,而是在之后类被加载的时候才会触发

注册了这些transformer之后,类的加载过程就变成了:

1.从class文件读取原始字节码

2.调用所有已注册的ClassFileTransformer方法

3.如果任何一个transformer返回了新的字节码数据,JVM就使用这个新的字节码去定义类(defineClass)

4.类加载完成之后,后续都使用的是修改后的版本

需要注意的一点是,这个修改之后的字节码文件版本只有在这次JVM运行期间是有效的,如果重新启动JVM的话,没有使用这个agent还是加载的原始的class文件

如果想永久修改字节码的话,在ClassFileTransformer中,把返回的byte[]写入文件即可

agentmain

对于JVM已经加载的类,可以通过Instrumentation.retransformClasses(Class<?>... classes)让 JVM 对已经加载的类重新应用 ClassFileTransformer

不会卸载原来的类并重新加载,而是重新应用transformer,生成新的字节码并替换当前类的定义

inst.retransformClasses(loader.loadClass("com.example.HelloWorld"));

可以实现:在不停止JVM的情况下更新类的行为

也可以直接替换类的字节码:

byte[] newByteCode = ...; // 新的字节码
inst.redefineClasses(new ClassDefinition(MyClass.class, newByteCode));

http://www.xdnf.cn/news/14177.html

相关文章:

  • ByteTrack:通过关联每个检测框实现多目标跟踪
  • NY197NY205美光闪存固态NY218NY226
  • 阳台光伏配套电表ADL200N-CT/D16-Wf-1
  • 【大模型学习cuda】cuda调度波次wave
  • 【字典树 滑动窗口】P12318 [蓝桥杯 2024 国研究生组] 分割字符串|普及+
  • 原创无损智算OTN(HIC-OTN,Hitless Intelligent Computing OTN)
  • ar 导航导览技术如何实现的?室内外融合定位与ar渲染技术深度解析
  • Linux-线程
  • Component name “index“ should always be multi-word的解决方式
  • HarmonyOS应用开发——线性布局
  • python爬虫简便框架,附带百度操作完整案例
  • Transformer 核心概念转化为夏日生活类比
  • 自主导航巡检机器人系统解决方案
  • [智能客服project] 架构 | 对话记忆 | 通信层
  • UR机器人解锁关节扭矩控制:利用英伟达Isaac Lab框架,推动装配自动化的Sim2Real迁移
  • 自适应攻击的强大后门防御
  • 【AT32】AT32定时器
  • 【华为Pura 80 Ultra影像真的有点东西】
  • 批处理实现:自动抓取perfetto日志 自动导出到当前文件夹 自动打开分析页面
  • NLP学习路线图(四十四):跨语言NLP
  • 【Linux基础知识系列】第二十四篇-网络配置文件的解析与修改
  • error: error:0308010c:digital envelope routines::unsupported
  • 联想笔记本怎么装win11专业版_联想笔记本用u盘装win11专业版图文教程
  • 【BrowserTools MCP:让 AI 直接调试你的网页应用】
  • 深度学习笔记26-天气预测(Tensorflow)
  • 光伏功率预测 | RF随机森林多变量单步光伏功率预测(Matlab完整源码和数据)
  • react react-router-dom中获取自定义参数v6.4版本之后
  • 使用大模型预测甲状旁腺恶性肿瘤的研究报告
  • 2025年6月英语四级CET-4作文预测10篇7页PDF
  • 电路图识图基础知识-电动机的保护电路保护方式(二十六)