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<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()
    方法会打印日志的,如果是该方法被其他地方调用,修改之后也会生效。

  • 郑重声明
    :“FunTester”首发,欢迎关注交流,禁止第三方转载。更多原创文章

    FunTester原创合集


技术类文章精选

  • Linux性能监控软件netdata中文汉化

  • 图解HTTP脑图

  • 性能测试中图形化输出测试数据

  • JMeter吞吐量误差分析

  • JMeter如何模拟不同的网络速度

  • 手机号验证码登录性能测试

  • 接口测试视频专题

无代码文章精选

  • 写给所有人的编程思维

  • 好书推荐《Java性能权威指南》

  • 自动化新手要避免的坑(上)

  • 自动化新手要避免的坑(下)

  • 如何成为全栈自动化工程师

  • 简化测试用例

  • 自动化策略六步走

本文使用 mdnice
排版

原文 

https://juejin.im/post/5eb0fab06fb9a0432d76c7c1

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » arthas命令redefine实现Java热更新

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址