91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用arthas命令redefine實現Java熱更新

發布時間:2020-07-28 16:13:59 來源:億速云 閱讀:160 作者:小豬 欄目:編程語言

這篇文章主要為大家展示了如何使用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() 方法會打印日志的,如果是該方法被其他地方調用,修改之后也會生效。

以上就是關于如何使用arthas命令redefine實現Java熱更新的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

营山县| 息烽县| 东至县| 吐鲁番市| 绥芬河市| 鄢陵县| 含山县| 长丰县| 太原市| 玉龙| 舞阳县| 安泽县| 班戈县| 瑞昌市| 华池县| 屯昌县| 亳州市| 定日县| 牡丹江市| 湘潭市| 民丰县| 三门峡市| 格尔木市| 沽源县| 泗阳县| 玉环县| 淮安市| 乌拉特中旗| 吕梁市| 广平县| 刚察县| 称多县| 辉县市| 广德县| 徐州市| 岳普湖县| 石棉县| 德安县| 福海县| 德昌县| 和平区|