如 javase 7 文档所述
The ClassLoader class uses a delegation model to search for classes and resources. Each instance of ClassLoader has an associated parent class loader. When requested to find a class or resource, a ClassLoader instance will delegate the search for the class or resource to its parent class loader before attempting to find the class or resource itself.
为什么 ClassLoader 将类或资源的搜索委托(delegate)给它的父类?这样做的目的或好处是什么?
最佳答案
类加载委托(delegate)有几个正当理由。我根据他们的优先级列出了他们(根据我的理解):
安全
Java 中的某些类不应被混淆。通过父优先委派模型,JVM 可以确保它只执行那些类,而不是自定义类加载器加载的类。
避免重复的类实例
类加载是一项代价高昂的操作,因为它需要从外部存储或网络读取数据、解析字节码、分配内存等。所以限制 JVM 只加载一次类是原因之一。通过使用父优先规则形成类加载器层次结构将实现这一点。
类范围
有些类是Java 的核心部分,例如java.lang.*
。这些类是Java语言的一部分,几乎所有地方都会用到。由于类由其完全限定名称以及加载该类的类加载器唯一标识,因此使用单个类加载器来加载此类类非常重要。因此, Bootstrap 和扩展类加载器会处理这个问题。
此外,通过在顶层加载类和资源,比在类加载器层次结构的底部加载更广泛的范围。
关于java - 为什么在java中加载类时委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41643204/