使用arthas命令redefine實(shí)現(xiàn)Java熱更新(推薦)
arthas 是一個(gè) Java 開(kāi)源診斷神器。
今天分享一個(gè)非常重要的命令 redefine
,主要作用是加載外部的 .class 文件,用來(lái)替換 JVM 已經(jīng)加載的類(lèi),總結(jié)起來(lái)就是實(shí)現(xiàn)了 Java 的熱更新。
redefine
在一下幾種情況中會(huì)失?。?、增加了 field
;2、增加了 method
;3、替換正在運(yùn)行的方法。
前兩個(gè)比較好理解,第三個(gè)意思就是這個(gè)方法必須結(jié)束之后才會(huì)被替換,如果有個(gè)方法開(kāi)始運(yùn)行之后就不會(huì)跳出,那么這個(gè)方法所在的類(lèi)是無(wú)法被替換的,類(lèi)似無(wú)限循環(huán)的方法。
中間提到了將本地的 .class 文件上傳到服務(wù)器的技巧,個(gè)人沒(méi)有采用,如果是要熱更新,完全可以利用 mc 這個(gè)命令在服務(wù)端編譯更新后的代碼,然后進(jìn)行本地替換。
arthas命令redefine實(shí)現(xiàn)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("成功!!!"); } }
調(diào)用 test() 方法會(huì)打印日志的,如果是該方法被其他地方調(diào)用,修改之后也會(huì)生效。
到此這篇關(guān)于使用arthas命令redefine實(shí)現(xiàn)Java熱更新(推薦)的文章就介紹到這了,更多相關(guān)arthas Java熱更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中checkbox實(shí)現(xiàn)跨頁(yè)多選的方法
最近做了一個(gè)項(xiàng)目其中遇到這樣的需求,要實(shí)現(xiàn)checkbox跨頁(yè)多選功能,經(jīng)過(guò)小編整理,順利解決,今天小編給大家分享Java中checkbox實(shí)現(xiàn)跨頁(yè)多選的方法,需要的的朋友參考下2017-01-01Java基礎(chǔ)知識(shí)之ByteArrayOutputStream流的使用
這篇文章主要介紹了Java基礎(chǔ)知識(shí)之ByteArrayOutputStream流的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Request對(duì)象如何獲取請(qǐng)求頭數(shù)據(jù)
這篇文章主要介紹了Request對(duì)象如何獲取請(qǐng)求頭數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07idea 自動(dòng)生成類(lèi)注釋和方法注釋的實(shí)現(xiàn)步驟
這篇文章主要介紹了idea 自動(dòng)生成類(lèi)注釋和方法注釋的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12關(guān)于PreparedStatement的setObject作用及說(shuō)明
這篇文章主要介紹了關(guān)于PreparedStatement的setObject作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03java?工作流引擎設(shè)計(jì)實(shí)現(xiàn)解析流程定義文件
這篇文章主要為大家介紹了java?工作流引擎設(shè)計(jì)與實(shí)現(xiàn)及流程定義文件解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Intellij IDEA命令行執(zhí)行java無(wú)法加載主類(lèi)解決方案
這篇文章主要介紹了Intellij IDEA命令行執(zhí)行java無(wú)法加載主類(lèi)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09