java热更新class如何实现?

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

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

原理是什么?

阅读 3.1k
1 个回答

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

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

推荐问题