阅读classloader相关资料发现,load class很容易,但是没有对应删除class的方法,也就是class对象只能装载没有卸载。
而重复的class,因为双亲委托是无法重复加载的。
那么非常不理解idea和tomcat如何实现热更新代码的。
原理是什么?
阅读classloader相关资料发现,load class很容易,但是没有对应删除class的方法,也就是class对象只能装载没有卸载。
而重复的class,因为双亲委托是无法重复加载的。
那么非常不理解idea和tomcat如何实现热更新代码的。
原理是什么?
12 回答5.9k 阅读
2 回答3.2k 阅读✓ 已解决
3 回答6.9k 阅读✓ 已解决
3 回答3k 阅读✓ 已解决
5 回答4.6k 阅读
4 回答2.3k 阅读
3 回答4.4k 阅读
spring的devtools是自定义了RestartClassLoader,重写了loadClass,优先自己加载,如果自己加载不到才让parent去加载,可以看做是打破了双亲委托
另外jdk还有一个Instrumentation api,里面有一个redefineClasses方法,也可以用来实现热加载,不过能修改的范围比较有限,比如可以修改已有方法的方法体,但不能增减方法