【JVM】Tomcat 的类加载机制
warning:
这篇文章距离上次修改已过253天,其中的内容可能已经有所变动。
Tomcat 的类加载机制主要是通过自定义的类加载器实现的,以确保应用程序的隔离性和可扩展性。Tomcat 中有三种主要的类加载器:SharedClassLoader、CatalinaClassLoader 和 WebappClassLoader。
- SharedClassLoader:用于加载 Tomcat 的核心类库,比如 Servlet API 等,它会被所有的 Web 应用程序共享。
- CatalinaClassLoader:用于加载 Tomcat 的核心类库,比如 Tomcat 自己的类和一些连接器(Connectors)。
- WebappClassLoader:用于加载单个 Web 应用程序的类。不同的应用程序拥有不同的类加载器实例,以避免类的冲突。
类加载器之间的关系如下图所示:

在 Tomcat 中,类加载器按照层次组织,子类加载器可以访问父类加载器加载的类,而父类加载器无法访问子类加载器加载的类。这种层次结构确保了 Tomcat 核心类与应用程序类之间的隔离,同时也允许应用程序访问核心类库的更新。
以下是一个简化的类加载器层次结构的代码示例:
这个示例展示了如何定义一个自定义的 WebappClassLoader,它继承了 URLClassLoader,并且在构造函数中指定了其父加载器。在实际的 Tomcat 实现中,这些类加载器是在 Tomcat 启动时由 Bootstrap 类完成初始化的。
评论已关闭