Java对象与JVM(二) Java对象在Java虚拟机中的内存布局
2022/10/27 14:24:50
本文主要是介绍Java对象与JVM(二) Java对象在Java虚拟机中的内存布局,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java对象与JVM(二) Java对象在Java虚拟机中的内存布局一、对象头(Header)
对象头(Header)包括两个部分。
第一部分存储自身运行时数据,如:哈希码(Hash Code)、GC分代年龄、锁状态标志、线程持有锁、偏向线程id、偏向时间戳等。这部分官方称为“Mark Word”。
另一部分是类型指针,即对象指向它的类元数据的指针。虚拟机通过这个来确定这个对象是哪个类的实例。
二、实例数据(Instance Data)
实例数据(Instance Data),是存储对象真正的有效信息,也就是程序代码中所定义的各种类型字段内容。
三、对其填充(Padding)
对齐填充(Padding)并不是必须的,也没有特殊的含义,可以把这部分理解为占位符。
四、实例数据
对象真正存储的有效信息; 程序代码所定义的各种类型字段内容,以及包括父类继承或子类定义的; 存储顺序: 受到JVM分配策略参数(FiedAllocationStyle)和字段在Java源码中定义顺序影响; JVM默认分配策略为:longs/double、ints、short/char、boolean、oops(Ordiary Object Pointers); VM默认分配策略使得,相同宽度的字段总被分配到一起; 这个前提下,父类定义的变量出现在子类之前; 如果虚拟机的"CompactFields"参数为true,子类中较窄的变量可能插入到父类变量空隙中,以压缩节省空间;
五、对齐填充
不是必然存在的; 只起占位符作用,没有其他含义; HotSpot虚拟机要求对象大小必须是8字节的整数倍; 对象头是8字节整数倍,所以填充是对实例数据没有对齐的情况来说的;
这篇关于Java对象与JVM(二) Java对象在Java虚拟机中的内存布局的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27本地多文件上传的简单教程
- 2024-11-27低代码开发:初学者的简单教程
- 2024-11-27如何轻松掌握拖动排序功能
- 2024-11-27JWT入门教程:从零开始理解与实现
- 2024-11-27安能物流 All in TiDB 背后的故事与成果
- 2024-11-27低代码开发入门教程:轻松上手指南
- 2024-11-27如何轻松入门低代码应用开发
- 2024-11-27ESLint开发入门教程:从零开始使用ESLint
- 2024-11-27Npm 发布和配置入门指南
- 2024-11-27低代码应用课程:新手入门指南