打破类加载器的双亲委派机制

双亲委派机制简述

就是自己先不处理,让父加载器处理。这里不是用的继承,每个classLoad里面有一个parent的实例

父辈们都处理不了 自己动手处理。

 

处理范围

每个加载器处理的范围不同

自定义类加载器-就是看你的findClass和loadClass怎么写了

系统类加载器-classPath

extClassLoader- jre/lib/ext下的jar包

BootstrapClassLoader jvm的核心类库 rt 等

 

为什么要用双亲委派

主要处于安全性,防止核心类库的类被改写。你要是随便写一些基础String Object 那jvm就乱套了


tomcat是如何打破的

自定义类加载器重写了loadClass和findClass

 

findClass流程

1.先去web应用目录下面查询类

2.交给父加载器(系统类加载器)去查找

3.如果还没找到 throw new ClassNotFoundException

 

loadClass流程

1.查询本地缓存中有没有load过(有就返回,没有往下流转,下面都一样)

2.使用系统类加载器查看是否load过

3.使用ext类加载器加载(防止覆盖核心类库的类)

4.使用自定义类加载器加载

4.使用系统类加载器加载 Class.forName()默认使用的是系统类加载器

 

tomcat的类加载器结构

 

打破类加载器的双亲委派机制_第1张图片

你可能感兴趣的:(JVM类加载,tomcat)