java类加载器的了解:
首先JVM将java源文件编译成.class字节码文件,然后用类加载器将class文件载入到内存供我们使用。可以看出ClassLoader在其中扮演着非常重要的作用。
- AppClassLoader的parent是ExtClassLoader。
- ExtClassLoader的parent为null。
现在总结下类加载的整个过程:
(1) 从缓存中查找这个class文件是否已经加载过,如果没有,则委托给父类加载器。
(2)递归,重复第一步操作。
(3)如果ExtClassLoader也没有加载过则使用BootstrapClassLoader查找缓存中是否已经加载过该class文件。如果查找为空,则在sun.mic.boot.class路径下查找,查找成功就返回,否则调用子加载器查找。
(4)如果上面BootstrapClassLoader没有查找成功,则使用ExtClassLoader加载在java.ext.dirs路径下查找,查找成功就返回,否则调用子加载器查找。
(5)如果上面ExtClassLoader没有查找成功,则使用AppClassLoader加载在java.class.path下查找,查找成功就返回,否则调用子类查找。
(6)如果都没有查找到,则抛出异常。
上面这个流程专业术语也叫双亲委托的加载流程,委托是从下往上,查找是从上往下的这个过程。
tomcat的加载方式: