java热订阅_使用arthas命令redefine实现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 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() 方法会打印日志的,如果是该方法被其他地方调用,修改之后也会生效。

到此这篇关于使用arthas命令redefine实现Java热更新(推荐)的文章就介绍到这了,更多相关arthas Java热更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值