JVM

JVM对象内存布局

Posted by Clear Blog on May 24, 2017

对象的内存布局分三个部分:

对象头(Header) 实例数据(Instance Data):有效信息 对齐填充(Padding):占位符,补齐8的倍数

对象头

Mark Word:包含一系列的标记位,比如轻量级锁的标记位,偏向锁标记位等等。在32位系统占4字节,在64位系统中占8字节 ②Class Pointer:用来指向对象对应的Class对象的内存地址。在32位系统占4字节,在64位系统中占8字节 ③Length:如果是数据对象,需要一个保存数组长度的空间,占4个字节

对象实际数据

对象实际数据包括了对象的所有成员变量,其大小由各个成员变量的大小决定,比如: byte和boolean是1个字节,short和char是2个字节,int和float是4个字节,long和double是8个字节, reference是4个字节(64位系统中是8个字节)。

对其填充

Java对象占用空间是8字节对齐的,即所有Java对象占用bytes数必须是8的倍数。 例如,一个包含两个属性的对象:int和byte,这个对象需要占用8+4+1=13个字节, 这时就需要加上大小为3字节的padding进行8字节对齐,最终占用大小为16个字节。