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>静态变量和静态代码块的初始化

  • 相关阅读:
    数据库中 dbo是什么意思
    常用的设计模式 介绍
    ReferenceEquals和 == 和equals()的比较
    IOC 控制反转模式
    集群和负载均衡
    数据库 读写分离
    C# 中using的几个用途
    WCF ABC
    SQL Server数据库性能优化(三)之 硬件瓶颈分析
    SQL Server数据库性能优化(二)之 索引优化
  • 原文地址:https://www.cnblogs.com/shuo1208/p/10655775.html
Copyright © 2011-2022 走看看