为什么在java中加载类时委托

问题描述 投票:6回答:1

正如javase 7文档所述

ClassLoader类使用委派模型来搜索类和资源。 ClassLoader的每个实例都有一个关联的父类加载器。当请求查找类或资源时,ClassLoader实例会在尝试查找类或资源本身之前将对类或资源的搜索委托给其父类加载器。

为什么ClassLoader将对类或资源的搜索委托给其父级?这样做的目的或优势是什么?

java classloader
1个回答
4
投票

类加载委派有几个正当理由。我根据他们的优先级(根据我的理解)列出了它们:

安全

Java中有某些类不应该被混淆。通过具有父优先委托模型,JVM可以确保它只执行那些类而不是自定义类加载器加载的类。

避免重复的类实例

类加载是一项代价高昂的操作,因为它需要从外部存储或网络读取数据,解析字节码,分配内存等。因此,限制JVM只加载一次类是其中一个原因。通过使用父优先规则形成类加载器层次结构将实现此目的。

类范围

某些类是Java的核心部分,如java.lang.*。这些类是Java语言的一部分,几乎可以在所有地方使用。由于一个类是由其完全限定名称以及加载该类的类加载器唯一标识的,因此有一个类加载器来加载这些类是很重要的。因此bootstrap和扩展类加载器会处理这个问题。此外,通过在顶级加载类和资源,它们比在类加载器层次结构底部加载的范围更广。

© www.soinside.com 2019 - 2024. All rights reserved.