Java JVM类加载过程

本文详细介绍了Java类从被加载到虚拟机内存中开始到可以被使用的过程,包括加载、链接(验证、准备、解析)及初始化阶段。重点阐述了每个阶段的任务与作用,如字节码验证、静态变量赋值等。

1.加载

    装载类的第一个阶段
    取得类的二进制流
    转为方法区数据结构
    在Java堆中生成对应的java.lang.Class对象

2.链接

    1)验证

        保证Class流的格式是正确的
        •文件格式的验证
            是否以0xCAFEBABE开头
            版本号是否合理
        •元数据验证
            是否有父类
            继承了final类?
            非抽象类实现了所有的抽象方法
        •字节码验证 (很复杂)
            运行检查
            栈数据类型和操作码数据参数吻合
            跳转指令指定到合理的位置

    2)准备

            分配内存,并为类设置初始值 (方法区中)

            public static int v=1;
            在准备阶段中,v会被设置为0
            在初始化的<clinit>中才会被设置为1
            对于static final类型,在准备阶段就会被赋上正确的值
            public static final  int v=1;

    3)解析

            符号引用替换为直接引用

3.初始化

       执行类构造器<clinit>

        static变量赋值语句
        static{}语句
        子类的<clinit>调用前保证父类的<clinit>被调用
        <clinit>是线程安全的

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值