Java 为什么jvm有许多CLASLOADER?为什么没有呢?

Java 为什么jvm有许多CLASLOADER?为什么没有呢?,java,jvm,classloader,Java,Jvm,Classloader,我正在学习Java中的类加载器,然后我想知道,为什么JVM有很多类加载器,为什么不是只有一个?第一次加载/lib,然后加载/lib/ext,最后一次加载类路径 如果您有自定义类加载器,则系统的第一个类加载器 有人能告诉我为什么JVM有很多类加载器吗 一个非常有用的应用程序是能够将多个web应用程序部署到单个JavaEE服务器中 每个应用程序可能使用相同库的不同版本,因此必须具有不同于其他应用程序的类加载器,以便能够在单个JVM中具有相同类的不同版本。它允许您在同一JVM中运行多个应用程序 它还允

我正在学习Java中的类加载器,然后我想知道,为什么JVM有很多类加载器,为什么不是只有一个?第一次加载
/lib
,然后加载
/lib/ext
,最后一次加载
类路径

如果您有自定义类加载器,则系统的第一个类加载器


有人能告诉我为什么JVM有很多类加载器吗

一个非常有用的应用程序是能够将多个web应用程序部署到单个JavaEE服务器中


每个应用程序可能使用相同库的不同版本,因此必须具有不同于其他应用程序的类加载器,以便能够在单个JVM中具有相同类的不同版本。

它允许您在同一JVM中运行多个应用程序

它还允许您卸载部分代码并在运行的系统中升级它们。(即使您只有一份申请)


您可能会发现有关OSGi的这些信息很有用

支持多个类加载器有几个原因

第一:分班制。 设想一个应用服务器。多个独立项目可能包含相同的库。如果每个应用程序都有自己的类加载器,那么它们可以加载不同的版本而不会发生冲突,并且每个类加载器都会实例化AFAIK静态字段

第二:可以覆盖类加载器来更改类。 类加载器可以在加载期间增强类。对于面向方面编程(AspectJ)或添加调试或分析代码非常有用。一种只修改一个库而不修改另一个库的简单方法是通过不同的类加载器加载它。

类装入器是分层的,在装入类时使用委托模型。类装入器请求 父级在尝试自己加载类之前先加载该类。当类装入器装入一个类时,子类 层次结构中的类加载器将不再重新加载该类。因此保持了独特性。加载的类 子类加载器在层次结构上对其父类加载的类具有可见性,但反之亦然
如上图所述。

但是web服务器有自己的加载器。它可以有几个类加载器。因此,一个不相关的注意事项是,一个JVM可以有一个单实例的多个实例??每个类装入器一个?