Instrumentation类方法简单介绍

文章目录前言一、Instrumentation类1.addTransformer(ClassFileTransformer transformer, boolean canRetransform)2.addTransformer(ClassFileTransformer transformer)3.removeTransformer(ClassFileTransformer transformer)4.isRetransformClassesSupported()5.retransformClasses(C
摘要由CSDN通过智能技术生成


前言

Instrumentation主要是提供Java代码增强功能。例如为了提供收集数据的功能,可以通过字节码增强技术,对类的方法进行增强。由于代码是添加的,所以他不会修改原来的状态。通过这个API,我们可以开发各种工具,例如监控的客户端,profiles,代码覆盖率分析工具以及事件的日志埋点工具。
使用方式:
一是在java启动的时候添加启动参数javaagent将你的增强包加载进来,会在permain里把Instrumentation传过来
二是使用VirtualMachine的API来进行。
具体的做法是调用VirtualMachine.attach(java pid),会在agentmain方法里把Instrumentation实例传过来


提示:以下是本篇文章介绍其中的方法

一、Instrumentation类

1.addTransformer(ClassFileTransformer transformer, boolean canRetransform)

代码如下(示例):

addTransformer(ClassFileTransformer transformer, boolean canRetransform)

函数的作用是注册一段代码增强逻辑,它能对所有已定义的类生效(除了通过依赖的transformer进行定义的类)。
当一个类被加载的时候,或者是redefineClasses方法被调用的时候,或者是retransformClasses方法被调用的时候(前提是canRetransform的参数是true),这个函数里注册的transformer就被调用了。
至于transformer之间调用的顺序,则是由添加的先后顺序来决定的(假设有多个agent对同一个类的方法进行了增强,他们是按照先后顺序来执行的)可以想象一下管道命令,是一样的。
异常问题,值得注意的是,如果这个方法在执行的时候发生了异常,jvm不会中断,他会继续进行下一个transformer的执行。
重复add的问题,同一个transformer可能会被add多次,这个是不被推荐的,add多次最好new新的对象进行。
当传入的transformer是null的时候,这个方法会抛出NullPointException的异常,当canRetransform被设为true,而JVM虚拟机被设置为不可被reTransfrom的时候(参见isRetransformClassesSupported方法),会抛出UnsupportedOperationException异常。

2.addTransformer(ClassFileTransformer transformer)

代码如下(示例):

addTransformer(ClassFileTransformer transformer)

等同于addTranformer(transformer,false);

3.removeTransformer(ClassFileTransformer transformer)

代码如下(示例):

removeTransformer(ClassFileTransformer transformer)
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Agent是Arthas使用的技术,是Skywalking使用的技术,是一份十分重要的技术。 课程的稀缺性在此之前,市面上并没有针对Java Agent进行系统介绍的课程。 通过搜索引擎查找,会发现与Java Agent相关的内容大多是个人知识总结分享的内容。这些内容有如下特点:内容质量不一详略程度不一学习难度千差万别总体上来说,学习者很难有一个整体认知、系统学习的过程。 课程的设计目标 在构思课程内容时,本课程带有以下目标:课程学习梯度:从简单到复杂,让学习者有一个循序渐进的理解过程。构造完整、统一的知识体系:不是零散的知识点堆砌,而是有一个统一的贯穿始终的知识框架。具有可操作性的代码示例,不只是讲概念,更注意于实践。课程内容安排 本课程通过四章内容对Java Agent相关知识进行讲解:第一章,介绍Agent Jar的三个组成部分:Manifest、Agent ClassClassFileTransformer。第二章,介绍Agent Jar的两种启动方式:从命令行启动和使用Attach机制启动。第三章,介绍如何利用Instrumentation API来实现Agent Jar的功能。第四章,Java Agent的应用与技巧。 通过本课程的学习,让同学们更好地建立起一个完整的知识体系:  讲师介绍我叫刘森,南京师范大学研究生毕业,2015年获得信息系统项目管理师(高级),2014年获得系统集成项目管理工程师(中级)。 目前,我的课程都是围绕着“Java字节码”技术展开: 《Java Agent基础篇》是在一个运行JVM当中提供修改字节码的机会《Java ASM系列》(免费课程)是一个操作字节码的库《Java 8 ClassFile》专注于字节码的理论知识,入选为“51CTO数字化人才证书项目认证课程” 因此,我对字节码技术有较为深入的研究和理解,大家想学习字节码的技术可以找我:字节码技术找刘森,轻松学习又省心~~~ 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值