课程咨询 :0535-6582277
QQ:2720475033

烟台java培训 > 达内新闻 > 对象的内存布局
  • 对象的内存布局

    发布:烟台计算机培训学校      来源:烟台计算机培训学校      时间: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你选择哪个?

最新开班日期  |  更多

java--名企定制班

java--名企定制班

开班日期:2月15

java--零基础脱产班

java--零基础脱产班

开班日期:2月15

java--在职提升班

java--在职提升班

开班日期:2月15

java--精品业余班

java--精品业余班

开班日期:2月15

2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56