加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 编程 > 正文

JVM源码分析

发布时间:2021-03-28 14:24:38 所属栏目:编程 来源:互联网
导读:实例数据是对象真正存储的有效信息,它包含了对象中定义的各种类型的字段。这些字段有对象本身定义的,也有从所有父对象继承的字段。 父类的构造方法先于子类执行,所以父类变量的定义都在子类前面。 对齐填充 对齐填充不是必须的,也没有实在的意义,它仅仅

实例数据是对象真正存储的有效信息,它包含了对象中定义的各种类型的字段。这些字段有对象本身定义的,也有从所有父对象继承的字段。

父类的构造方法先于子类执行,所以父类变量的定义都在子类前面。

对齐填充

对齐填充不是必须的,也没有实在的意义,它仅仅是个占位符的作用。HotSpot虚拟机要求对象的起始地址必须是8字节的整数倍,因此当对象没有满足的时候,就需要对齐填充来补全。

现在我们已经了解了对象在堆内存的布局,在之前的JVM文章中也学习了虚拟机栈结构和方法区(JDK1.8之后称为元空间,勾勾之前习惯称为方法区,但是怕大家混淆后续我们都用元空间表示),那么接下来我们详细分析school对象创建的整个过程。

对象创建的步骤

对象的创建是在主线程的main()方法中,所以在主线程的虚拟机栈中就会创建main()的栈帧,main()就是当前方法。

我们回顾下栈和栈帧。


JVM内存区域划分为5个模块:堆、元空间、虚拟机栈、本地方法栈和程序计数器(也成为pc寄存器)。

虚拟机栈和本地方法栈都属于栈,本地方法栈中只存放native方法的栈信息。

虚拟机栈的生命周期和线程的生命周期一致,它随着线程的创建而创建,随着线程的销毁而销毁,所以它是线程私有的内存区域。

虚拟机栈是由栈帧组成的,栈帧中包含了局部变量表、操作数栈、动态链接、方法返回地址、附加信息。栈帧是随着方法的调用而创建的。所以当主线程调用main()方法时,此时在主线程的虚拟机栈中就创建了main()栈帧。

main()栈帧中的局部变量表包含两个变量:args和school。

主线程的虚拟机栈的栈帧结构如下图:
 

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读