当前位置: 首页 > 知识库问答 >
问题:

引导类加载器和扩展类加载器的职责可以合并吗?

宦文柏
2023-03-14

我想知道java中上述类装入器的职责是否可以合并?(不是由用户/程序员,而是由JVM开发人员)
引导加载器从jdk/jre/lib/*加载类,扩展加载器从jdk/jre/lib/ext/*加载,那么将它们结合在一起有什么问题呢?
这样做也可以保存一个级别的委托。不是吗?

我知道它们之间唯一的区别是bootstrap classloader是用本地语言实现的,而extension classloader是用java本身实现的
,如果有必要保持它们的分叉,那么请告诉为什么这样做。

共有1个答案

南宫浩皛
2023-03-14

是的,JVM不能从引导类加载器加载lib/ext类并没有技术上的原因。可能会有一些次要的安全问题(由引导类加载器加载的类被赋予额外的特权)和向后兼容性问题(一些高级应用程序假定存在额外的类加载器),但是考虑到您需要修改JRE安装,我认为这些问题有点次要。

Java9的模块化运行时映像(JEP220)特性建议删除扩展机制,但为了向后兼容,它们建议将扩展类加载器保留在层次结构中。删除扩展机制是否会给现实世界的应用程序带来太多问题,或者扩展类加载器是否会在后续版本中保留或删除,还有待观察。

 类似资料:
  • 框架中所有的类都是通过类加载器(ClassLoader)加载的,通过Loader我们可以实现类的统一管理。下面我们一起来看看Loader提供了哪些加载方法: 1. Loader::import 加载一个类或者加载一个包 方法原型 import( $classPath, $type = IMPORT_APP, $extension=EXT_PHP ) 参数名称 参数说明 $classPath 文件的

  • 加载器,顾名思义,是用于加载元素的,加载的元素可以是库(类),视图文件 , 驱动器 ,辅助函数 , 模型 或其他你自己的文件。 注解 该类由系统自动加载,你无需手工加载。 应用程序"包" 包的视图文件 类参考 应用程序"包" 应用程序包(Package)可以很便捷的将你的应用部署在一个独立的目录中, 以实现自己整套的类库,模型,辅助函数,配置,文件和语言包。 建议将这些应用程序包放置在 appli

  • 主要内容:1.类加载过程,2.类加载时机,3.类加载器,4.类加载机制:当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化。 1.类加载过程 1.1加载 加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Cl

  • (是的,这是hacky,可能不是最佳实践,但它是体积最小的解决方案) 我有一个涉及几个jar的项目——一个可运行的启动器、一个服务器、一个服务器的包装器和服务器的插件。 启动器通过启动一个新的未连接的进程、一个子进程或者只是实例化它来运行包装器,这取决于配置。对于这个问题来说,这应该不重要。 包装器使用URLClassLoader来加载服务器jar并启动它,这工作正常。 在启动服务器之前,包装器会

  • 包含 'dwrloader.js' 文件 使用 DWR 来获取数据,首先要包含 'dwrloader.js' 文件。 <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="jquery.easyui.

  • 我在Tomcat中实现自己的身份验证过滤器时遇到了一些问题。当我部署项目时,我得到以下日志: 原因:java。lang.ClassCastException:类com。somename。第。sso。卡蒙达。无法将KeyDoppessAuthenticationProvider强制转换为类org。卡蒙达。bpm。发动机Rest安全授权。AuthenticationProvider(com.somen