0
点赞
收藏
分享

微信扫一扫

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(即对象引用)指向堆内存中开辟的对象。

Hello类的JVM加载过程_类变量

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

举报

相关推荐

0 条评论