网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

如何使用arthas命令redefine实现Java热更新

这篇文章主要为大家展示了如何使用arthas命令redefine实现Java热更新,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、做网站、德钦网络推广、小程序开发、德钦网络营销、德钦企业策划、德钦品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供德钦建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

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命令redefine实现Java热更新
网页地址:http://bjjierui.cn/article/pjhdig.html

其他资讯