黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 一文讀懂Java熱更新

一文讀懂Java熱更新

更新時間:2022-06-15 10:25:44 來源:動力節(jié)點 瀏覽2846次

Java熱更新是什么?動力節(jié)點小編來告訴大家。在持續(xù)交付的時代,重新部署一個新的版本只需要點擊一下按鈕。但在有的情況下,重新部署過程可能比較復雜,停機是不被允許的。所以JVM提供了另外一種選擇:在不重啟應用的前提下進行小幅改動,又稱熱更新。

對于某些大型的應用來說,每次的重啟都需要花費大量的時間成本,所以,如果能在不重啟虛擬機的情況下更新一個類,在某些業(yè)務場景下變得十分重要。

在Java開發(fā)領域,熱更新一直是一個難以解決的問題,目前的Java虛擬機只能實現(xiàn)方法級別的熱更新,對于整個類的結構修改,仍然需要重啟虛擬機。

熱更新的方法

Java熱更新一直不斷地改進。

1.4開始JPDA引入了hotSwap機制(JPDA Enhancements),實現(xiàn)了debug時的method body的動態(tài)性。

1.5開始通過JVMTI實現(xiàn)的java.lang.instrument(Java Platform SE 8)的premain方式,實現(xiàn)了agent方式的動態(tài)性(JVM啟動時指定agent)。

1.6增加了agentmain方式,實現(xiàn)了運行時動態(tài)性(通過The Attach API 綁定到具體VM)。其基本實現(xiàn)是通過JVMTI的retransformClass/redefineClass進行函數體級別的字節(jié)碼更新,ASM、CGLib之類基本都是圍繞這些在做動態(tài)性。

1.定義不同的classloader

Tomcat的動態(tài)部署就是監(jiān)聽war變化,然后調用StandardContext.reload(),用新的WebContextClassLoader實例來加載war,然后初始化servlet來實現(xiàn)。類似的實現(xiàn)還有OSGi等。

2.agentmain

agentmain熱更新的原理

為了實現(xiàn)Java進程A與進程B之間的本地通信,熱更新的JVM進程使用VirutalMachine.attach(pid)來連接需要熱更新的JVM進程,然后使用virtualMachine.loadAgent加載自定義的agent(筆者查看了Arthas源碼,原理也大致相同)。這個通信通道成功建立之后,那么進程A就能通知進程B去執(zhí)行某些操作,從而達到監(jiān)控進程B或者控制進程B的某些行為的目的。如jstack、jmap等JDK自帶的工具,基本都是通過Attach機制去達成各自想要的目的的。

JVM啟動的時候,在JVM內部啟動了一個監(jiān)聽線程,這個線程的名字叫“Signal Dispatcher”,該線程的作用是,監(jiān)聽并處理OS的信號。

3.Arthas

arthas實現(xiàn)熱更新

使用Arthas三個命令就可以搞定熱更新

jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
mc /tmp/UserController.java -d /tmp
redefine /tmp/com/example/demo/arthas/user/UserController.class

jad命令反編譯,然后可以用其它編譯器,比如vim來修改源碼

mc命令來內存編譯修改過的代碼

用redefine命令加載新的字節(jié)碼

JVM熱更新的局限

基于Attach機制實現(xiàn)的熱更新,更新類需要與原來的類在包名,類名,修飾符上完全一致,否則在classRedefine過程中會產生classname don't match 的異常。

例如顯示這樣的報錯:redefineClasses exception class redefinition failed: attempted to delete a method.

具體來說,JVM熱更新局限總結:

函數參數格式不能修改,只能修改函數內部的邏輯

不能增加類的函數或變量

函數必須能夠退出,如果有函數在死循環(huán)中,無法執(zhí)行更新類。

以上就是關于“一文讀懂Java熱更新”的介紹,大家如果想了解更多相關知識,可以關注一下動力節(jié)點的Java在線學習,里面的課程內容細致全面,從入門到精通,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 免看一级一片一在线看 | 亚洲视频在线观 | 天堂在线链接 | 开心激情五月婷婷 | 欧美激情一区 | 曰鲁夜鲁鲁狠狠综合 | 皮皮在线精品亚洲 | 欧美很很干 | 国产一在线观看 | 日韩欧美一区二区不卡 | 九九色网站 | 国产清纯91天堂在线观看 | 亚洲欧美专区精品久久 | 在线中文字幕网站 | 欧美精品系列 | 久久国产精品亚洲一区二区 | 免费的性爱视频 | 欧美狠狠入鲁的视频极速 | 黄色a视频在线观看 | 久草性视频 | 天天做日日干 | 国产成人免费在线观看 | 7m凹凸精品视频大全 | 国产一区二区三区成人久久片 | 日韩精品视频一区二区三区 | 欧美日本亚洲国产一区二区 | 天堂中文在线网 | 欧美日韩视频在线成人 | 涩涩逼| 波多野结衣在线观看视频 | 国产乱子伦一区二区三区 | 欧美国产综合视频 | 天天夜碰日日摸日日澡 | 黄色刺激网站 | 国产精品成人观看视频国产 | 男女性色大片免费网站 | 狠狠色狠狠色综合日日92 | 三级在线观看视频 | 日韩123| 亚洲国产精久久小蝌蚪 | 一级片黄色片 |