jvm|JVM——类加载机制( 二 )


6.通过 ClassLoader 默认的 loadClass 方法 , 也不会触发初始化动作 。
类加载器虚拟机设计团队把加载动作放到 JVM 外部实现 , 以便让应用程序决定如何获取所需的类 , JVM 提供了3种类加载器:
启动类加载器(Bootstrap ClassLoader)负责加载 JAVA_HOME\\lib 目录中的 , 或通过-Xbootclasspath 参数指定路径中的 , 且被虚拟机认可(按文件 名识别 , 如 rt.jar)的类 。
扩展类加载器(Extension ClassLoader)负责加载 JAVA_HOME\\lib\\ext 目录中的 , 或通过 java.ext.dirs 系统变量指定路径中的类 库 。
应用程序类加载器(Application ClassLoader)负责加载用户路径(classpath)上的类库 。JVM 通过双亲委派模型进行类的加载 , 当然我们也可以通过继承 java.lang.ClassLoader 实现自定义的类加载器 。

双亲委派当一个类收到了类加载请求 , 他首先不会尝试自己去加载这个类 , 而是把这个请求委派给父类去完成 , 每一个层次类加载器都是如此 , 因此所有的加载请求都应该传送到启动类加载其中 , 只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没有找到所需加载的 Class) , 子类加载器才会尝试自己去加载 。
采用双亲委派的一个好处是比如加载位于 rt.jar 包中的类 java.lang.Object , 不管是哪个加载器加载这个类 , 最终都是委托给顶层的启动类加载器进行加载 , 这样就保证了使用不同的类加载器最终得到的都是同样一个 Object 对象 。

感谢诸君的观看 , 文中如有纰漏 , 欢迎在评论区来交流 。 如果这篇文章帮助到了你 , 欢迎点赞\uD83D\uDC4D关注 。