类加载器
Bootstrap ClassLoader(根类加载器):加载lib/rt.jar 等核心类,由C++实现
Extension ClassLoader(扩展类加载器):加载扩展jar包 在jre/lib/ext/中
App ClassLoader(应用程序加载器):加载classpath指定的内容
Custom ClassLoader(自定义加载器)
双亲委派机制
从自定义加载器开始向上找缓存,有缓存用缓存,没缓存到根加载器再向下一层一层找,上层有就直接用上层的.类似递归.
好处(优点):
主要是为了安全(保证核心API不被篡改),其次为了怕重复加载导致的浪费
怎么打破双亲委派机制
- SPI Service Provider InterFace 服务提供接口
通过ThreadContextClassLoader(线程上下文加载器)破坏了双亲委派加载机制; - OSGI tomcat 热部署
为了实现不同应用依赖不同版本使用同一个类名的问题,需要加载多个相同的、不同版本的类。会优先加载Web应用自己定义的类,通过WebAPPClassLoader加载本身目录下的class文件,加载不到再给CommonClassLoader加载。