使用arthas命令redefine实现Java热更新(推荐)
时间:2020-12-19 11:36:33|栏目:JAVA代码|点击: 次
arthas 是一个 Java 开源诊断神器。
今天分享一个非常重要的命令 redefine ,主要作用是加载外部的 .class 文件,用来替换 JVM 已经加载的类,总结起来就是实现了 Java 的热更新。
redefine 在一下几种情况中会失败:1、增加了 field ;2、增加了 method ;3、替换正在运行的方法。
前两个比较好理解,第三个意思就是这个方法必须结束之后才会被替换,如果有个方法开始运行之后就不会跳出,那么这个方法所在的类是无法被替换的,类似无限循环的方法。
中间提到了将本地的 .class 文件上传到服务器的技巧,个人没有采用,如果是要热更新,完全可以利用 mc 这个命令在服务端编译更新后的代码,然后进行本地替换。
arthas命令redefine实现Java热更新
代码
package com.fun;
import com.fun.frame.SourceCode;
import org.slf4j.Logger;
import java.util.ArrayList;
import java.util.List;
public class Fun extends SourceCode {
int[] ss = new int[1024];
public static Logger logger = getLogger(Fun.class);
public static void main(String[] args) {
List<Fun> funs = new ArrayList<>();
while (true) {
Fun fun = new Fun();
funs.add(fun);
sleep(3000);
test();
output(funs.size());
}
}
public static void test() {
logger.info("成功!!!");
}
}
调用 test() 方法会打印日志的,如果是该方法被其他地方调用,修改之后也会生效。
上一篇:java实现五子棋小游戏
栏 目:JAVA代码
下一篇:Java执行JS脚本工具
本文标题:使用arthas命令redefine实现Java热更新(推荐)
本文地址:http://www.codeinn.net/misctech/34510.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




