java对象在JVM堆中的数据结构

2021/10/17 14:39:32

本文主要是介绍java对象在JVM堆中的数据结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数据结构

java对象和数组是存放在堆中的,那么这些instance的数据结构是什么呢?
image

  • 对象头
    • 第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。
    • 第二部分是klass,类型指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。

对象头存放的是这个对象的一些元数据信息。例如每个对象都有哈希值,GC分代年龄,锁状态标志等,这些信息就是存放在对象头中。

  • 实际数据

对象真正存储的有效信息就是放在这里的,也是在程序代码中所定义的各种类型的字段内容。无论是从父类继承下来的,还是在子类中定义的,都需要记录起来。

  • 对齐填充

对齐填充并不是必然存在的,也没有特别的含义,它仅仅起着占位符的作用。由于HotSpot VM的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说,就是对象的大小必须是8字节的整数倍。而对象头部分正好是8字节的倍数(1倍或者2倍),因此,当对象实例数据部分没有对齐时,就需要通过对齐填充来补全。

转载

https://www.cnblogs.com/james111/p/7273953.html



这篇关于java对象在JVM堆中的数据结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程