首页 > 其他 > 详细

JVM类加载

时间:2016-09-11 22:43:30      阅读:228      评论:0      收藏:0      [点我收藏+]

Java源代码被编译成class字节码,最终需要加载到虚拟机中才能运行。整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。

技术分享

加载

通过一个类的全限定名获取描述此类的二进制字节流的过程。虚拟机设计团队把加载动作放到JVM外部实现,以便让应用程序决定如何获取所需的类,实现这个动作的代码称为“类加载器”。

JVM一般提供3种类加载器:

  1. 启动类加载器(Bootstrap ClassLoader)负责加载 JAVA_HOMElib 目录中的,或通过-Xbootclasspath参数指定路径中的,且被虚拟机认可(按文件名识别,如rt.jar)的类。
  2. 扩展类加载器(Extension ClassLoader)负责加载 JAVA_HOMElibext 目录中的,或通过java.ext.dirs系统变量指定路径中的类库。
  3. 应用程序类加载器(Application ClassLoader)负责加载用户路径(classpath)上的类库。

一般情况,JVM会基于上述类加载器,通过双亲委派模型进行类的加载动作,当然我们也可以通过继承java.lang.ClassLoader实现自定义的类加载器。

技术分享

双亲委派模型工作过程:当一个类加载器收到类加载任务,优先交给其父类加载器去完成,因此最终加载任务都会传递到顶层的启动类加载器,只有当父类加载器无法完成加载任务时,才会尝试执行加载任务。

双亲委派模型有什么好处?
比如位于rt.jar包中的类java.lang.Object,无论哪个加载器加载这个类,最终都是委托给顶层的启动类加载器进行加载,确保了Object类在各种加载器环境中都是同一个类。

 

JVM类加载

原文:http://www.cnblogs.com/hesier/p/5862903.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!