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的介绍的更多相关文章

  1. 深入浅出Java探针技术1--基于java agent的字节码增强案例

    Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一.什么是java agent? Java agent是在JDK1.5引入的,是一种可以动态修改 ...

  2. 深入浅出Java探针技术2---java字节码生成框架ASM、Javassist和byte buddy的使用

    目前Java字节码生成框架大致有ASM.Javassist和byte buddy三种 ASM框架介绍及使用 1.ASM介绍 ASM是一种Java字节码操控框架,能够以二进制形式修改已有的类或是生成类, ...

  3. Java探针-Java Agent技术-阿里面试题

    Java探针参考:Java探针技术在应用安全领域的新突破 最近面试阿里,面试官先是问我类加载的流程,然后问了个问题,能否在加载类的时候,对字节码进行修改 我懵逼了,答曰不知道,面试官说可以的,使用Ja ...

  4. Java动态追踪技术探究(动态修改)

    Java动态追踪技术探究 Java探针-Java Agent技术-阿里面试题 秒懂Java动态编程(Javassist研究) 可以用于在类加载的时候,修改字节码. Java agent(Java探针) ...

  5. 赶紧收藏!王者级别的Java多线程技术笔记,我java小菜鸡愿奉你为地表最强!

    Java多线程技术概述 介绍多线程之前要介绍线程,介绍线程则离不开进程. 首先 , 进程 :是一个正在执行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元: 线程:就 ...

  6. Java分布式应用技术架构介绍

    分布式架构的演进 系统架构演化历程-初始阶段架构

  7. Android 插件化开发(一):Java 反射技术介绍

    写在前面:学习插件化开发推荐书籍<Android 插件化开发指南>,本系列博客所整理知识部分内容出自此书. 在之前的项目架构的博文中,我们提到了项目插件化架构,提到插件化架构不得不提的到J ...

  8. Java探针

    使用java代理来实现java字节码注入 使用JavaSsist可以对字节码进行修改 使用ASM可以修改字节码 使用Java代理和ASM字节码技术开发java探针工具可以修改字节码 备注:javass ...

  9. Java动态追踪技术探究

    引子 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话: “Debug一下吧.” “线上机器,没开Debug端口.” “看日 ...

随机推荐

  1. Qt platform plugin 'windows' 问题的解决方法

    关于Qt 发布程序时遇到qt platform plugin ‘windows’问题的解决方法如下  遇到这个问题,一般应该已经把一部分dll拷贝到了发布的可执行文件同级目录, 我是直接添加C:\Qt ...

  2. django框架进阶-cookie和session-长期维护

    ###############    python基础回顾:装饰器    ################ # 装饰器非常重要,1是写代码的时候,2是面试的时候,没有python开发不问装饰器的, # ...

  3. php配置memcached的扩展。

    (一)安装memcached服务器 1根据系统下载相应版本的memcached服务器版本:如win7(64位=====>memcached-win64/memcached.exe 2.解压到目录 ...

  4. zabbix配置文件详解--服务(server)端、客户(agent)端、代理(proxy)端

    在zabbix服务(server)端.客户(agent)端.代理(proxy)端分别对应着一个配置文件,即:zabbix_server.conf,zabbix_agentd.conf,zabbix_p ...

  5. HDU-6312-Game

    题意: 一个集合里有1到n,两个人轮流从中取数,取出一个数的同时这个数的因子也被取走.取走最后一个数者为胜.判断是否先手必胜. 思路: 一道挺有意思的博弈题.一开始在纸上列出了n为1到6的情况,发现都 ...

  6. Vimmer一套全语言支持的完美Vim配置——附Monaco字体

    本配置轻量,强大,支持流行语言,包括现代前段框架react,jsx,vue,pug(jade)高亮和格式化,支持各种语言的自动补全.同时新增了MonacoNerd字体,可以显示文件类型logo,Mon ...

  7. form组件及cookie和session

    多对多关系表的三种创建方式 1.全自动创建 优势:不需要你手动创建第三张表 不足:由于第三张表不是你手动创建的,也就意味着,第三张表字段是固定的无法更改 class Book(models.Model ...

  8. 探索Kinect的更多可能——亲历第十九届机器人世界杯RoboCup

    作者:微软亚洲研究院资深项目经理 吴国斌 2015年7月19日,第十九届RoboCup机器人世界杯足球赛,在中国合肥隆重开幕.来自全球七十六个国家和地区的一百余支代表队参加了决赛,他们优秀的作品给观众 ...

  9. lvs/dr+keepalived搭建成功后,开启防火墙,虚拟IP不能访问,但是真实IP却可以访问

    lvs/dr+keepalived搭建成功后,开启防火墙,虚拟IP不能访问,但是真实IP却可以访问,如果关闭防火墙虚拟IP就可以访问网站了,这个问题肯定是防火墙在作怪. 经过这两的不懈奋斗和大家的帮助 ...

  10. “代码量统计脚本”

    概述 本文从一段统计C/C++程序脚本入手,记录shell脚本常用和重要的知识点. 代码量统计程序 文件名称,count_code_line.sh 12345678910111213141516171 ...