java热部署

46 篇文章 0 订阅
24 篇文章 0 订阅
本文探讨了Java热部署的多种方法,包括Class.forName、ClassLoader.loadClass的使用,以及JRebel、Springloaded等热部署工具的安装与配置。通过Eclipse和IDEA插件实现项目热部署,并解析了Tomcat的热部署原理。还深入研究了Java agent的premain和agentmain方法在热替换中的作用,以及javassist的动态类加载能力。
摘要由CSDN通过智能技术生成
  • Class.forName和ClassLoader.loadClass - 简书
  • Eclipse安装热部署热加载插件JRebel(免费版————idea也可用) - that summer - CSDN博客
  • Eclipse中使用JRebel实现项目热部署(Maven插件版) - LinWenLi - 博客园
  • java程序如何实现hotswap - 简书
  • Springloaded使用方法 - 唐震宇的博客 - CSDN博客
  • Tomcat热部署的实现原理 - FreeMan。 - 博客园
  • 揭秘Java热部署原理及JRebel(Hotcode)的实现原理 - dai.sp - 博客园
  • 使用javassist运行时动态重新加载java类及其他替换选择 - weixin_34355881的博客 - CSDN博客
  • 探秘 Java 热部署二(Java agent premain) - 莫那-鲁道 - 博客园
  • 探秘 Java 热部署三(Java agent agentmain) - 莫那-鲁道 - 博客园
  • Java_java动态编译整个项目,解决jar包找不到问题
  • 慎用动态编译

总结

classLoad 只能热加载反射运行的类。
javassist的toClass()可以实现。new 级别的热替换。但是必须是在第一次对Class加载之前。

所以可以得到结论,如果类加载到jvm了,再想替换new级别的操作就困难了。

agent 可以在jvm程度上对类进行重新装载,到达new的热替换。
Springloaded 也是用的agent的方式。

比较成熟的热加载方案。
classLoad 热加载反射运行的类 >> asm把所有new改成classLoad.loadClass()…newInstance(…)的方式 >>
在所有类初始化之前这样做,就可以代替new关键字, 1.最好使用jdk-agent方式。 2.在main之前把线程的classLoad替换。

Class.forName和ClassLoader.loadClass
如果想让Class.forName和自定义的ClassLoader.loadClass执行一样。
必须保证A.getClass.getClassLoader是同一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值