必看必学必完成java 成神之路服务端

Tomcat WebappClassLoader 类加载机制源码

2017-09-06  本文已影响240人  jijs

需要了解的知识JVM 类加载机制深入浅出

tomcat中的ClassLoader

下面我们主要讲解下WebappClassLoader的类加载机制

第一步


首先调用findLoaderClass0() 方法检查WebappClassLoader中是否加载过此类。


WebappClassLoader 加载过的类都存放在 resourceEntries 缓存中。

protected final Map<String, ResourceEntry> resourceEntries =  new ConcurrentHashMap<>();

第二步


如果第一步没有找到,则继续检查JVM虚拟机中是否加载过该类。
调用ClassLoader的findLoadedClass() 方法检查


第三步


如果前两步都没有找到,则使用AppClassloader加载该类(也就是当前JVM的ClassPath)

第四步


如果前三步都没找到,通过filter() 方法检查该类是否在定义的包名下,如果在则通过 StandardClassLoader类加载。

第五步


如果前4步都没有找到,将由WebappClassLoader来加载。


从当前的工程的Web-INF/classes 目录下查找


如果找到,则创建ResourceEntry对象,保存这个类的元信息,并把他保存在WebappClassLoader的resourceEntries中,便于下次查找。


想了解更多精彩内容请关注我的公众号

上一篇下一篇

猜你喜欢

热点阅读