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

    加载步骤
    JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化

    加载:该阶段会在内存中生成一个代表这个类的 java.lang.Class 对象, 作为方法区这个类的各种数据的入口。加载信息可以从class文件、jar 包、war 包中读取,也可以在运行时计算生成(动态代理),还可以由其它文件生成(比如将 JSP 文件转换成对应的 Class 类)。

    验证:该阶段是为了确保 class 文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

    准备:该阶段正式为类变量分配内存并设置类变量的初始值阶段,即在方法区中分配这些变量所使用的内存空间。

    解析:该阶段是指虚拟机将常量池中的符号引用替换为直接引用的过程。

    初始化:该阶段是类加载最后一个阶段,前面的类加载阶段之后,除了在加载阶段可以自定义类加载器以外,其它操作都由 JVM 主导,到了初始阶段,才开始真正执行类中定义的 Java 程序代码。

    类加载器
    启动类加载器(Bootstrap ClassLoader)
    负责加载 JAVA_HOMElib 目录中的, 或通过-Xbootclasspath 参数指定路径中的, 且被虚拟机认可( 按文件名识别, 如 rt.jar) 的类。

    扩展类加载器(Extension ClassLoader)
    负责加载 JAVA_HOMElibext 目录中的,或通过 java.ext.dirs 系统变量指定路径中的类库。

    应用程序类加载器(Application ClassLoader)
    负责加载用户路径( classpath)上的类库。

    双亲委派
    什么是双亲委派?
    当一个类收到了类加载请求,他首先把这个请求委派给父类去完成,每一个层次类加载器都是如此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在它的加载路径下没有找到所需加载的class), 子类加载器才会尝试自己去加载。

    作用?
    保证了使用不同的类加载器最终得到的都是同样一个 Object 对象,保证了一个类在内存中只被加载一次,避免类的重复加载。

    END

  • 相关阅读:
    课堂练习-找水王绪
    输入法评估
    课堂练习-找水王
    课堂练习—电梯调度
    第一阶段冲刺总结
    《你的灯亮着吗》阅读笔记Ⅱ
    《你的灯亮着吗》阅读笔记Ⅰ
    软件工程——寻找水桶
    软件工程——寻找水王
    软件工程——典型用户
  • 原文地址:https://www.cnblogs.com/ityard/p/11100896.html
Copyright © 2011-2022 走看看