前言
jvm中有一个很重要的模块,就是类加载机制,而且由于其双亲加载机制的设计,保证了java核心库的安全性,更进一步,保证了共享对象这一机制,从而达到信息的高度共享。有意思的是,java的ClassLoader并不是final的,也就是我们完全可以通过继承它而改写这个类加载体系,tomcat就是这么做的。这篇博客就是来介绍tomcat为了实现其实际的需求,改写类加载体系的。
一、类加载
在JVM中并不是一次性把所有的文件都加载到内存,而是一步一步的,按照需要来加载。
比如JVM启动时,会通过不同的类加载器加载不同的类。当用户在自己的代码中,需要某些额外的类时,再通过类加载机制加载到JVM中,并且存放一段时间,便于频繁使用。
二、JVM类加载
JVM类加载采用父类委托机制,(注意,上下级之间是委托关系,不是继承关系)如下图所示:
JVM中包括集中类加载器:
- BootStrapClassLoader 引导类加载器
- ExtClassLoader 扩展类加载器
- AppClassLoader 应用类加载器
- CustomClassLoader 用户自定义类加载器
他们的区别上面也都有说明。需要注意的是,不同的类加载器加载的类是不同的,因此如果用户加载器1加载