Java 有 3 个类加载器:
- Bootstrap ,
- 扩展和
- 系统
他们只有一个角色;从不同的包中加载类。
但是为什么 Java 有 3 个不同的类加载器而不是只有一个,因为一个类加载器可以加载所有必需的类?
最佳答案
拥有三个基本类加载器(Bootstrap、扩展、系统)的原因主要是安全性。
在 JVM 1.2 版本之前,只有一个默认的类加载器,也就是目前所谓的“Bootstrap”类加载器。
类加载器加载类的方式是每个类加载器首先调用它的父类,如果父类没有找到请求的类,则当前类加载器自己寻找它。
一个关键概念是 JVM 不会授予包访问权限(如果您没有特别提及 private
、public
或protected
) 除非请求此访问的类来自同一个类加载器,该类加载器加载了它希望访问的类。
因此,假设用户调用他的类 java.lang.MyClass
。理论上,它可以获得对 java.lang
包中所有字段和方法的包访问权,并改变它们的工作方式。语言本身并不能阻止这一点。但是 JVM 会阻止它,因为所有真正的 java.lang
类都是由引导类加载器加载的。不同的加载程序 = 无法访问。
类加载器中内置了其他安全功能,使得某些类型的黑客攻击变得困难。
那么为什么要三个类加载器呢?因为它们代表三个级别的信任。最受信任的类是核心 API 类。接下来是安装的扩展,然后是出现在类路径中的类,这意味着它们在您的机器上是本地的。
有关更详细的解释,请参阅 Bill Venners's "Inside the Java Virtual Machine" .
关于java - Java中有3个类加载器的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28011224/