起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 一文读懂Java热更新

一文读懂Java热更新

时间:2022-08-14 14:43:44来源:零基础学Java 作者:Java学习网 已有: 名学员访问该课程

  快捷搜索:java热更新

前言: Java热更新是什么?IT培训网小编来告诉大家。在持续交付的时代,重新部署一个新的版本只需要点击一下按钮。但在

Java热更新是什么?IT培训网小编来告诉大家。在持续交付的时代,重新部署一个新的版本只需要点击一下按钮。但在有的情况下,重新部署过程可能比较复杂,停机是不被允许的。所以JVM提供了另外一种选择:在不重启应用的前提下进行小幅改动,又称热更新。

对于某些大型的应用来说,每次的重启都需要花费大量的时间成本,所以,如果能在不重启虚拟机的情况下更新一个类,在某些业务场景下变得十分重要。

在Java开发领域,热更新一直是一个难以解决的问题,目前的Java虚拟机只能实现方法级别的热更新,对于整个类的结构修改,仍然需要重启虚拟机。

热更新的方法

Java热更新一直不断地改进。

1.4开始JPDA引入了hotSwap机制(JPDA Enhancements),实现了debug时的method body的动态性。

1.5开始通过JVMTI实现的java.lang.instrument(Java Platform SE 8)的premain方式,实现了agent方式的动态性(JVM启动时指定agent)。

1.6增加了agentmain方式,实现了运行时动态性(通过The Attach API 绑定到具体VM)。其基本实现是通过JVMTI的retransformClass/redefineClass进行函数体级别的字节码更新,ASM、CGLib之类基本都是围绕这些在做动态性。

1.定义不同的classloader

Tomcat的动态部署就是监听war变化,然后调用StandardContext.reload(),用新的WebContextClassLoader实例来加载war,然后初始化servlet来实现。类似的实现还有OSGi等。

2.agentmain

agentmain热更新的原理

为了实现Java进程A与进程B之间的本地通信,热更新的JVM进程使用VirutalMachine.attach(pid)来连接需要热更新的JVM进程,然后使用virtualMachine.loadAgent加载自定义的agent(笔者查看了Arthas源码,原理也大致相同)。这个通信通道成功建立之后,那么进程A就能通知进程B去执行某些操作,从而达到监控进程B或者控制进程B的某些行为的目的。如jstack、jmap等JDK自带的工具,基本都是通过Attach机制去达成各自想要的目的的。

JVM启动的时候,在JVM内部启动了一个监听线程,这个线程的名字叫“Signal Dispatcher”,该线程的作用是,监听并处理OS的信号。

3.Arthas

arthas实现热更新

使用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命令加载新的字节码

JVM热更新的局限

基于Attach机制实现的热更新,更新类需要与原来的类在包名,类名,修饰符上完全一致,否则在classRedefine过程中会产生classname don't match 的异常。

例如显示这样的报错:redefineClasses exception class redefinition failed: attempted to delete a method.

具体来说,JVM热更新局限总结:

函数参数格式不能修改,只能修改函数内部的逻辑

不能增加类的函数或变量

函数必须能够退出,如果有函数在死循环中,无法执行更新类。

以上就是关于“一文读懂Java热更新”的介绍,大家如果想了解更多相关知识,可以关注一下IT培训网的Java在线学习,里面的课程内容细致全面,从入门到精通,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。

文章出自:http://qh.itpxw.cn/peixun/software/2022123702.html

文章标题:一文读懂Java热更新



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容