一个Java对象内部结构是什么样子的呢?
一个对象在内存中分为三块存储区域:1对象头、2实例数据、3对齐填充
对象头(Object Head):对象头占用12字节,对象头分为8字节(64位JVM)的对象标记(Mark Word)和4字节的类元信息(指向类元信息的引用)
实例数据(Instance Data):存储类本身的实例成员变量和所有可见的父类成员变量。
对齐填充(Padding):对象的存储空间分配单位为8个字节,总大小不足8的倍数,需要填充。
对象标记(Mark Word)存储对象本身运行时的数据,如哈希码、GC标记、锁信息、县城关联信息等。
类元信息(Klass)指向存储类信息的引用
举个例子:Integer实例对象占用多少字节呢?基本数据类型int占用四字节,再加12字节的对象头,是16个字节。所以,包装类对象比基本类型占用的空间还是要多很多的。
拓展阅读: