Java虚拟机类加载案例

本篇对应《深入理解java虚拟机》第九章,通过几个案例的讲述来深入理解。

tomcat的类加载器

Tomcat一共有三组目录用来存放java的类库,然后还有一个是web程序自带的/WEB-INF/*目录,分别代表的含义:

  • /common目录下,可以被tomcat和所有的web程序使用
  • /server目录下,只有tomcat可以使用该类库
  • /shared目录下,只有所有的web程序可以使用,Tomcat本身却无法使用。
  • /WEB-INF下,仅仅该web应用程序可以使用。

Tomcat实现了多个类加载器来分别加载这些类库。当然不论什么类加载器必然是需要实现双亲委派模型的,于是就有下面这张图了。

image-20200614164320940

其中每个类加载器对应各自目录下的类库的加载,而且一般会有多个WebApp类加载器和多个Jsp类加载器。Jsp加载器的目的是为了实现热更新,即当JSP发生变化的时候,直接换一个JsperLoader来加载最新的JSP文件。