为什么jvm有很多clasloaders?为什么不一个?

liu*_*ori 14 java jvm classloader

我正在学习ClassLoaderJava,然后我想知道,为什么JVM有很多类加载器,为什么不只有一个?首先加载<Java_Runtime_Home>/lib,然后加载<Java_Runtime_Home>/lib/ext,最后加载classpath.

如果你有自定义类加载器,那么系统是第一个.

有人可以告诉我为什么JVM有很多类加载器?

JB *_*zet 21

一个非常有用的应用程序是能够将多个Web应用程序部署到单个Java EE服务器中.

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


use*_*434 6

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

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

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


Rak*_*esh 5

在此输入图像描述 类加载器是分层的,在加载类时使用委托模型.类加载器请求其父级在尝试自己加载之前首先加载该类.当类加载器加载一个类时,层次结构中的子类加载器将永远不会再次重新加载该类.因此保持了独特性.由子类加载器加载的类可以看到其父级在层次结构中加载的类,但反之则不正确,如上图所示.