Java内存区域对象的内存布局和访问定位(Header、Instance、Padding)
Java普通对象被创建出以后,就需要关注下它在JVM堆中的内存布局是什么样子的。 大致分为3个区域: 1.对象头(Header) 2.实例数据(Instance) 3.对齐补充(Padding) 1.对象头(Header) 对象头在JVM这本书中有个专门的章节去讲Class文件的布局,这一章还没有去看,因此,对于这个暂时没有什么概念。 主要分为2部分: 1)存储对象自身的运行时数据(Mark Word) 常见的包括hash码,GC年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳等等。 具体布局我不想关注了,先知道下是什么,之后再去想为什么。 2)存储指向对象类型数据的指针 这个指针就是确定这个对象是哪个类的实例。 但是书中说这个不是必须的,需要对应对象的访问方式 存在的意义在于,栈中对象的引用使用直接指针的时候,该指针指向堆内存中的对象,所以对象头是需要存储它的类云数据指针,这个指针才是指向方法区中对象的类型 数据。 3)Java数组是特例 当是数组时还需要记录数组长度,这是因为数组对象类型的数据中没有数组长度信息。 2.实例数据(Instance) 对象存储的真正有效的数据,...

