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来更新方法体,无兼容性、性能和内存的风险
缺点:只能更新方法体
网友评论