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