Java的类加载机制以及tomcat类加载对比
标题java类加载过程
标题加载 ->验证 ->准备 -> 解析 ->初始化
加载:将class文件解析成二进制文件进入jvm中
验证:校验文件是否符合java规范,是否会侵害jvm
准备:为类的静态变量赋值默认初始值(如:int赋0),final修饰的变量直接赋值
解析:符号引用(任何形式的字面量,可以定位到目标)解析为直接引用(指针)
初始化:为类静态变量赋正确的初始值。
类加载器:分为:启动类加载器(c++编写),扩展类加载器(加载jre的中的jar包的类),应用类加载器
双亲委派机制:保证了不会重复加载统一类;
什么时候需要打破双亲委派机制:
tomcat默认不是使用的双亲委派机制,一个应用程序对应的一个应用类加载器。为的是防止不同应用的不同版本的类库冲突。
tomcat 的类加载是这样的:
1.启动类加载器
2.系统类加载器:加载tomcat启动的类,比如bootstrap.jar,通常在catalina.bat或者catalina.sh中指定。位于CATALINA_HOME/bin下。
3.通用类加载器:加载tomcat使用以及应用通用的一些类,位于CATALINA_HOME/lib下
4.应用类加载器:每个应用对应唯一一个应用类加载器,加载位于WEB-INF下的classes文件