Hello类的JVM加载过程

1 待解析例子

public class Hello {



    private static String name="test";



    private int age = 10;



    public static void main(String[] args) {

        Hello hello = new Hello();

    }

}

 

2 加载的过程

第一步 类加载器先将字节码文件Hello.class加载到JVM的方法区中,并且经过了(加载、验证、准备、解析、初始化)步骤。

  • 准备阶段:将类变量初始化,这里name是类变量,所以在准备阶段初始化为null,如byte=0, short=0, int=0, long=0L, char=' ', boolean=false, float=0.0f, double=0.0d, 引用类型=null。

  • 初始化阶段:将设置的值赋给类变量,比如将类变量name在初始化阶段设置为"test"(符号引用转为地址引用,指向常量池)。

第二步 在方法区加载Hello,找到main方法,会将main方法加载到线程栈中,并且执行main方法。

第三步 线程栈main中解析碰到了new关键字会执行如下操作。

第四步 线程栈中声明对象Hello hello。

  • 堆中创建对象的执行过程

    • 1 加载实例变量如age进入开辟的内存中。

      • 将实例变量age 加载入开辟好的内存中。

      • 初始化age=0。

      • 初始化age=10。

      • 执行构造方法如下2

    • 2 执行构造方法就是<init>方法。

第五步 在JVM堆中申请一片内存空间,将Hello相关信息如实例变量、实例方法等从方法区加载到堆内存中。

第六步 将对象的声明hello(即对象引用)指向堆内存中开辟的对象。

参考自Q群:Java交流讨论一群(250431014)-群主的帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值