zoukankan      html  css  js  c++  java
  • JVM类加载

    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类在各种加载器环境中都是同一个类。

  • 相关阅读:
    HDU3555:Bomb
    入门OJ:售货员的难题
    Zju1100 Mondriaan
    与图论的邂逅08:树上倍增
    入门OJ:八中生成树2
    Poj2286 The Rotation Game
    P1379 八数码难题
    [SCOI2005]骑士精神
    与图论的邂逅07:K短路
    [Usaco2007 Feb]Cow Party
  • 原文地址:https://www.cnblogs.com/hesier/p/5862903.html
Copyright © 2011-2022 走看看