java热更新class如何实现?

阅读classloader相关资料发现,load class很容易,但是没有对应删除class的方法,也就是class对象只能装载没有卸载。
而重复的class,因为双亲委托是无法重复加载的。

那么非常不理解idea和tomcat如何实现热更新代码的。

原理是什么?

阅读 2.8k
1 个回答

spring的devtools是自定义了RestartClassLoader,重写了loadClass,优先自己加载,如果自己加载不到才让parent去加载,可以看做是打破了双亲委托

另外jdk还有一个Instrumentation api,里面有一个redefineClasses方法,也可以用来实现热加载,不过能修改的范围比较有限,比如可以修改已有方法的方法体,但不能增减方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏