烟台Java培训
达内烟台中心

18300268127

热门课程

对象的内存布局

  • 时间:2016-11-02
  • 发布:烟台计算机培训学校
  • 来源:烟台计算机培训学校

烟台计算机培训学校小编看来,对象在内存中布局可以分成三块区域:对象头、实例数据和对齐填充。

1、对象头

对象头包括两部分信息:运行时数据和类型指针,如果对象是一个数组,还需要一块用于记录数组长度的数据。

1.1、运行时数据包括哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向锁ID和偏向时间戳等,这部分数据在32位和64位虚拟机中的长度分别为32bit和64bit,官方称为"Mark Word"。Mark Word被设计成非固定的数据结构,以实现在有限空间内保存尽可能多的数据。

32位的虚拟机中,对象未被锁定的状态下,Mark Word的32bit中25bit存储对象的HashCode、4bit存储对象分代年龄、2bit存储锁标志位、1bit固定为0,具体如下:

其它状态(轻量级锁定、重量级锁定、GC锁定、可偏向锁)下Mark Word的存储内容如下:

1.2、对象头的类型指针指向该对象的类元数据,虚拟机通过这个指针可以确定该对象是哪个类的实例。

2、实例数据

实例数据就是在程序代码中所定义的各种类型的字段,包括从父类继承的,这部分的存储顺序会受到虚拟机分配策略和字段在源码中定义顺序的影响。

3、对齐填充

由于HotSpot的自动内存管理要求对象的起始地址必须是8字节的整数倍,即对象的大小必须是8字节的整数倍,对象头的数据正好是8的整数倍,所以当实例数据不够8字节整数倍时,需要通过对齐填充进行补全。

上一篇:java高级工程师都什么要求
下一篇:大数据和传统BI你选择哪个?

名校海归硕士参加达内iOS培训,获11k高薪入职中国500强企业

Java NIO浅析

达内教育孙莹:不断创新,打造IT全产业链的职业课程版图

IBM主题演讲 – Java革新大提速

选择城市和中心
贵州省

广西省

海南省

达内教育

有位老师想和您聊一聊