Java探针技术-retransformclasses的介绍
retransformclasses
void retransformclasses(class... classes)
throws unmodifiableclassexception
- 重转换提供的类集。
-
此函数为检测已加载类提供了方便。 当最初加载了类或重定义了类时,初始类文件字节可以使用
classfiletransformer
转换。 此函数返回转换进程(以前是否发生过转换)。 此转换按以下步骤进行:从初始类文件字节开始
对于每个添加时
canretransform
设为 false 的转换器,上一次类加载或重定义期间transform
返回的字节将被重新用于转换的输出;注意,这等价于不做更改地重新应用前一个转换;没有调用transform
的情况除外。对于每个添加时
canretransform
设为 true 的转换器,在这些转换器中调用transform
方法转换的类文件字节将作为类的新定义安装
转换的顺序在
transform
方法中描述。在自动重新应用不可重转换的转换时,也将使用这一顺序。最初的类文件字节表示(应用转换前)传递给
classloader.defineclass
或redefineclasses
的字节,但有可能不完全匹配。常量池的布局或内容可能不同。常量池的条目可能多一些或少一些。常量池条目的顺序可能不同,但是,方法字节码中常量池的索引将是对应的。一些属性可能不存在。在顺序没有意义的地方(例如,方法的顺序),可能不保留顺序。此方法在一个集合上操作,以便允许同时对多个类进行相互依赖的更改(重转换类 a 要求重转换类 b)。
如果重转换的方法有活动的堆栈帧,那么这些活动的帧将继续运行原方法的字节码。重转换的方法将用于新的调用。
此方法不会引起任何初始化操作,jvm 惯例语义下发生的初始化除外。换句话说,重定义一个类不会引起其初始化方法的运行。静态变量的值将与调用之前的值一样。
重转换类的实例不受影响。
重转换可能会更改方法体、常量池和属性。重转换不得添加、移除、重命名字段或方法;不得更改方法签名、继承关系。在以后的版本中,可能会取消这些限制。在应用转换之前,类文件字节不会被检查、验证和安装。如果结果字节错误,此方法将抛出异常。
如果此方法抛出异常,则不会重转换任何类。
此方法旨在用于检测,正如类规范所述。
-
- 参数:
classes
- 要转换的类数组; 允许长度为 0 数组,在这种情况下,此方法不执行任何操作- 抛出:
unmodifiableclassexception
- 如果不能修改指定的类(ismodifiableclass(java.lang.class>)
返回false
)unsupportedoperationexception
- 如果 jvm 的当前配置不允许重转换(isretransformclassessupported()
为 false),或者重转换试图做出不受支持的更改classformaterror
- 如果数据不包含有效的类noclassdeffounderror
- 如果类文件中的名称不等于类的名称unsupportedclassversionerror
- 如果类文件版本号不受支持classcircularityerror
- 如果新类包含循环linkageerror
- 如果发生链接错误nullpointerexception
- 如果提供的类数组或其任意组件为null
。
- 从以下版本开始:
- 1.6
- 另请参见:
isretransformclassessupported()
,addtransformer(java.lang.instrument.classfiletransformer, boolean)
,classfiletransformer
Java探针技术-retransformclasses的介绍的更多相关文章
- 深入浅出Java探针技术1--基于java agent的字节码增强案例
Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一.什么是java agent? Java agent是在JDK1.5引入的,是一种可以动态修改 ...
- 深入浅出Java探针技术2---java字节码生成框架ASM、Javassist和byte buddy的使用
目前Java字节码生成框架大致有ASM.Javassist和byte buddy三种 ASM框架介绍及使用 1.ASM介绍 ASM是一种Java字节码操控框架,能够以二进制形式修改已有的类或是生成类, ...
- Java探针-Java Agent技术-阿里面试题
Java探针参考:Java探针技术在应用安全领域的新突破 最近面试阿里,面试官先是问我类加载的流程,然后问了个问题,能否在加载类的时候,对字节码进行修改 我懵逼了,答曰不知道,面试官说可以的,使用Ja ...
- Java动态追踪技术探究(动态修改)
Java动态追踪技术探究 Java探针-Java Agent技术-阿里面试题 秒懂Java动态编程(Javassist研究) 可以用于在类加载的时候,修改字节码. Java agent(Java探针) ...
- 赶紧收藏!王者级别的Java多线程技术笔记,我java小菜鸡愿奉你为地表最强!
Java多线程技术概述 介绍多线程之前要介绍线程,介绍线程则离不开进程. 首先 , 进程 :是一个正在执行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元: 线程:就 ...
- Java分布式应用技术架构介绍
分布式架构的演进 系统架构演化历程-初始阶段架构
- Android 插件化开发(一):Java 反射技术介绍
写在前面:学习插件化开发推荐书籍<Android 插件化开发指南>,本系列博客所整理知识部分内容出自此书. 在之前的项目架构的博文中,我们提到了项目插件化架构,提到插件化架构不得不提的到J ...
- Java探针
使用java代理来实现java字节码注入 使用JavaSsist可以对字节码进行修改 使用ASM可以修改字节码 使用Java代理和ASM字节码技术开发java探针工具可以修改字节码 备注:javass ...
- Java动态追踪技术探究
引子 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话: “Debug一下吧.” “线上机器,没开Debug端口.” “看日 ...
随机推荐
- HihoCode-1323-回文字符串
参考博客: https://blog.csdn.net/mitsuha_/article/details/76690634 https://blog.csdn.net/u014142379/artic ...
- Session深入浅出
Session会在浏览器关闭后消失吗? 通常情况下,当我们关闭浏览器再重新打开后,我们就需要再次进行登陆(如果没有进行下次自动登录之类的设置).在Jav中(Session是通用的,这里以Java为例) ...
- deeplearning.ai 神经网络和深度学习 week2 神经网络基础
1. Logistic回归是用于二分分类的算法. 对于m个样本的训练集,我们可能会习惯于使用for循环一个个处理,但在机器学习中,是把每一个样本写成一个列向量x,然后把m个列向量拼成一个矩阵X.这个矩 ...
- iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码
iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件 iOS高仿微信完整项目源码 想要更简单的推送消息,看本文就对了 ScrollView嵌套ScrolloView解决方 ...
- 无标定量|有标定量|谱图计数|XIC|AMT数据库|RT对对齐|母离子|子离子|SILVER|SRM|iBAQ|APEX|差异蛋白筛选|MaxQuant|PANDA|C-HPP
生物医学大数据-蛋白质定量 现今肽段定量效率存在巨大差异.比如相同质量蛋白质,但是肽段和蛋白信号不均一,在物理条件一致时,仅有70%的重复率,并且当重复次数变多时,overlapping在变少. 无标 ...
- 史无前例的KDD 2014大会记
2014大会记" title="史无前例的KDD 2014大会记"> 作者:蒋朦 微软亚洲研究院实习生 创造多项纪录的KDD 2014 ACM SIGKDD 国际会 ...
- echo追加和覆盖
追加: echo " " >> 文件名 覆盖: echo " " > 文件名
- geoserver整合swagger2支持自动生成API文档
网上各种博客都有关于swagger2集成到springmvc.springboot框架的说明,但作者在整合到geoserver中确碰到了问题,调试一番最后才解决,遂总结一下. swagger2集成只需 ...
- 吴裕雄--天生自然 R语言开发学习:基本图形(续一)
#---------------------------------------------------------------# # R in Action (2nd ed): Chapter 6 ...
- python基础 生成器 迭代器
列表生成式: a=[1,2,3] print a b=[i*2 for i in range(10)] #i循环10次,每一个i的值乘2就是列表中的值.列表生成式 print b >>[1 ...