繁体   English   中英

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

[英]why jvm has many clasloaders? why not one?

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

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

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

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

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

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

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

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

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

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

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

您可能会发现有关OSGi的这些信息很有用http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM