本文主要讲解我们在编写Java程序的时候一个new关键字,后面可能隐藏了哪些技术!
Java对象的内存布局,创建,访问详解
Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面,创建对象通常(例外:复制 ,反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(普通对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?
一、对象的内存布局(对象大概长啥样)
想要找对象,你得有个对你对象长啥样的大概描述塞,比如肤白貌美,大长腿啥的。
在HotSpot虚拟机中,对象在堆内存的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data) 和对齐填充(Padding)
1.1 对象头(Header)
HotSpot虚拟机对象的对象头部分包括两类信息。
-
第一类用于存储对象自身的运行时数据:
该类中包括:哈希码(hashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。这部分数据的长度在32位和64位的虚拟机中分别为32个比特和64个比特,官方称它为“Mark Word”
存储内容 标志位 状态