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

    第一步:加载

    1.通过类的全限定名获取这个类的二进制字节流;

    2.字节流的静态存储结构转化为方法区的运行时数据结构;

    3.在java堆里生成一个类对象,作为方法区的访问入口(Class对象)。

    第二步:验证

    1.验证Class文件的标识:魔数 Magic Number;

    2.验证主副版本号;

    3.验证常量池(常量类型及数据结构是否符合规定,UTF-8是否符合标准);

    4.Class文件的每个部分(字段表,方法表等);

    5.源数据验证(父类验证,继承验证,final验证);

    6.字节码验证(指令验证);

    7.符号引用验证(通过符号引用是否能找到相应的字段,方法,类)。

    第三步:准备

    为类变量分配内存,并且设置类变量的初始化阶段。

    只对static类变量进行内存分配。

    static int n=2;初始化值为0,而不是2,因为这个时候还没开始执行任何java方法(clinit)。

    static final int n = 2;对应到常量池ConstantValue,在准备阶段必须被赋值为2。

    第四步:解析

    对符号引用进行解析。

    直接引用:指向目标的指针或偏移量。

    解析简单来说就是把符号引用变为直接引用。

    主要涉及类,接口,方法,字段

    第五步:初始化

    <init>类的实例构造器

    <clinit>静态变量和静态代码块的初始化

  • 相关阅读:
    JAVA将list转化为xml文件
    Hibernate 配置文件属性之 级联操作cascade 性能优化inverse
    Hibernate 一对多关系操作
    Hibernate 原生SQL操作
    Hibernate 之 Criteria
    Hibernate HQL查询
    Hibernate使用getCurrentSession() 的配置
    Hibernate 主键生成策略
    hibernate(一)--简单示例
    适配器模式
  • 原文地址:https://www.cnblogs.com/shuo1208/p/10655775.html
Copyright © 2011-2022 走看看