对象头的内部结构(new Object这个对象里面到底有什么)【图文】


1、创建了Customer()实例 和 Account()实例
对象头的内部结构(new Object这个对象里面到底有什么)【图文】
2、对象头里包括:运行时元数据、类型指针、实例数据、对齐填充

(1) 运行时元数据里又包括:哈希值(HashCode)、GC分代年龄、锁状态标志

① 哈希值:它是一个地址,用于栈对堆空间中对象的引用指向,不然栈是无法找到堆中对象的

② GC分代年龄:记录幸存者区对象被GC之后的年龄age,,一般age为15之后下一次GC就会直接进入老年代

③ 锁状态标志:记录一些加锁的信息

(2)类型指针:是对方法区中类元信息的引用

(3) 实例数据:真实记录一个对象包含的数据,比如说一个person对象,里面可能包含年龄、性别、身高等等
其中数据为字符串的,要引用到字符串常量池。
想知道jdk8字符串常量池到底在那个地方存储的可以看这里。

(4)对齐填充:填充部分仅起到占位符的作用, 原因是HotSpot要求对象起始地址必须是8字节的整数,假如不是,就采用对齐填充的方式将其补齐8字节整数倍,那么为什么是8呢?原因是64位机器能被8整除的效率是最高的。

另外这个过程还会涉及到逃逸分析。我写了一篇逃逸分析的具体作用,感兴趣可以看看。

基本数据类型 所占字节数 默认值 包装类名称
byte 1(1字节=8位) 0 Byte
short 2 0 Short
int 4 0 Integer
long 8 0L Long
double 8 0.0d Double
float 4 0.0f Float
char 2 ‘\u0000’ Character
boolean 1 false Boolean

怎样快速记住这些类型的方法,请看这里。

盘点一下 Java创建对象的几种方式(6大种)全面版

有用点个关注,手留余香!???? ???? ????