黑龙江网站建设企业,青浦企业网站制作,一流高职院校建设计划项目网站,长沙网红打卡地方有哪些文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine#xff08;加载外部的.class文件#xff0c;redefine到JVM里 #xff09;举例1#xff1a;加载新的代码#xff0c;jad/mc 命令使用举例2#xff1a;上传 .class 文件到服务器的技巧 本人其他相关文章… 文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine加载外部的.class文件redefine到JVM里 举例1加载新的代码jad/mc 命令使用举例2上传 .class 文件到服务器的技巧 本人其他相关文章链接 二、命令列表
2.2 class/classloader相关命令
2.2.3 redefine加载外部的.class文件redefine到JVM里 提示 目的常用来解决线上服务不停止修改代码操作 注意点1redefine 的 class 不能修改、添加、删除类的 field 和 method包括方法参数、方法名称及返回值。 注意点2如果 mc 失败可以在本地开发环境编译好 class 文件上传到目标系统使用 redefine 热加载 class 注意点3目前 redefine 和 watch/trace/jad/tt 等命令冲突以后重新实现 redefine 功能会解决此问题 注意点4redefine 后的原来的类不能恢复redefine 有可能失败比如增加了新的 field参考 jdk 本身的文档。 注意点5reset命令对redefine的类无效。如果想重置需要redefine原始的字节码。 注意点6redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后如果再执行上面提到的命令则会把redefine的字节码重置。 原因是 jdk 本身 redefine 和 Retransform 是不同的机制同时使用两种机制来更新字节码只有最后修改的会生效。 参数说明
参数名称参数说明[c:]ClassLoader 的 hashcode[classLoaderClass:]指定执行表达式的 ClassLoader 的 class name
举例1加载新的代码jad/mc 命令使用
# 1、使用jad反编译 demo.MathGame 输出到 /opt/MathGame.java
jad --source-only demo.MathGame /opt/MathGame.java
# 2、把上一步反编译的代码修改完成后使用mc在内存中对新的代码进行编译
mc /opt/MathGame.java -d /opt
# 3、使用redefine命令加载新的字节码
redefine /opt/demo/MathGame.class举例2上传 .class 文件到服务器的技巧
使用mc命令来编译jad的反编译的代码有可能失败。可以在本地修改代码编译好后再上传到服务器上。有的服务器不允许直接上传文件可以使用base64命令来绕过。 在本地先转换.class文件为 base64再保存为 result.txt base64 Test.class result.txt到服务器上新建并编辑result.txt复制本地的内容粘贴再保存 把服务器上的 result.txt还原为.class base64 -d result.txt Test.class用 md5 命令计算哈希值校验是否一致
本人其他相关文章链接
1.Arthas 全攻略让调试变得简单 2.Arthas dashboard当前系统的实时数据面板 3.Arthas thread查看当前JVM的线程堆栈信息 4.Arthas jvm查看当前JVM的信息 5.Arthas sysprop查看和修改JVM的系统属性 6.Arthas sysenv查看JVM的环境变量 7.Arthas vmoption查看和修改 JVM里诊断相关的option 8.Arthas getstatic查看类的静态属性 9.Arthas heapdumpdump java heap, 类似 jmap 命令的 heap dump 功能 10.Arthas logger查看 logger 信息更新 logger level 11.Arthas mbean查看 Mbean 的信息 12.Arthas memory查看 JVM 内存信息 13.Arthas ognl执行ognl表达式 14.Arthas perfcounter查看当前 JVM 的 Perf Counter 信息 15.Arthas vmtool从 jvm 里查询对象执行 forceGc 16.Arthas jad字节码文件反编译成源代码 17.Arthas mcMemory Compiler/内存编译器 18.Arthas redefine加载外部的.class文件redefine到JVM里 19.Arthas classloader 查看 classloader 的继承树urls类加载信息 20.Arthas sc查看JVM已加载的类信息 21.Arthas sm查看已加载类的方法信息 22.Arthas monitor方法执行监控 23.Arthas stack 输出当前方法被调用的调用路径 24.Arthas trace 方法内部调用路径并输出方法路径上的每个节点上耗时 25.Arthas tt方法执行数据的时空隧道记录下指定方法每次调用的入参和返回信息并能对这些不同的时间下调用进行观测 26.Arthas watch 方法执行数据观测 27.Arthas profiler使用async-profiler对应用采样生成火焰图