Java HotSwap 技术概览

2018-08-01  本文已影响0人  lessIsMore_技术笔记

1.JPDA

Java Platform Debugger Architecture是java IDE 调试的基础

修改jvm启动参数即可打开

    -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n

技术原理也是java instrument api

确定:仅能修改方法体,不能增加修改方法、field

2.JRebel

商用产品,收费

主要用于开发期间hot 部署修改代码,这种方式叫做zero turnaround,可无限次修改,实时生效

技术原理不详,据说是将所有类均改为匿名类。可参见文档

尽管JRuby以“类(class)”作为其功能特性,但在运行时,其每个对象都是动态的,任何时候都可以加入新的域和方法。这意味着JRuby对象与Map没有什么两样,有着从方法名字到方法实现的映射,以及域名到其值的映射。这些方法的实现被包含在匿名的类中,在遇到方法时这些类就会被生成。如果你添加了一个方法,则所有JRuby要做的事情就是生成一个新的匿名类,该类包含了这一方法的方法体。因为每个匿名类都有一个唯一的名称,因此在加载该类是不会有问题的,而这样做的结果是,应用被实时动态地更新了。

缺点:不开源,性能可能影响比较大

3.DCEVM + Hotswap Agent

    通过给jvm加patch的方式,扩展了java instrument机制,使得可以修改类字节码的所有部分,包括方法名和field

缺点:需要给jvm加patch,风险比较大,实施部署也比较麻烦,如果只是开发期使用还比较好

4.类Tomcat HotDeploy

采用new WebAppClassLoader的方式,然后加载新的类的方式来实现代码的hot deploy,更新代码没有限制。

缺点:会占用permgen空间,频繁更新会造成outofmemory exception

5.redefineClasses

采用基本的java instrument api来更新方法体,无兼容性、性能和内存的风险

缺点:只能更新方法体

上一篇 下一篇

猜你喜欢

热点阅读