美文网首页
对象在堆中的存储

对象在堆中的存储

作者: sunyuan1125 | 来源:发表于2017-04-13 07:13 被阅读38次

1、对象头

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

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

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

2、实例数据

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

3、对齐填充

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

相关文章

  • 对象在堆中的存储

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

  • 内存管理 Tagged Pointer

    Tagged Pointer通常创建对象,对象存储在堆中,对象的指针存储在栈中。我们要找到这个对象,就需要先在栈中...

  • 面向对象

    创建对象的内存结构流程 对象存储在堆中,引用存储在栈中,堆中的每一个数据都是相互隔离的。 每一个.class文件加...

  • new String的值是存储在堆中还是常量池呢?

    面试问:new String的值是存储在堆中还是常量池呢? 在Java中,我们知道new出来的对象会存储在堆中,那...

  • 引用类型数组

    数组是对象 在Java中,数组属于引用类型数据数组数据在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指...

  • 深浅拷贝

    前置知识 基本类型直接存储于栈内存中对象类型的值存储于堆内存中,对象的属性值存储的只是它的堆内存的地址(指针)。 ...

  • Java基础篇

    堆栈 栈 存储局部变量 存储方法调用 堆 存储Java对象(成员变量 局部变量 类变量 ->指向的对象都存储在堆内...

  • iOS的内存管理

    概述 我们知道在程序运行过程中要创建大量的对象,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意...

  • 一篇了解JVM堆(Heap),你学会了吗?

    1.JVM堆的概念 JVM中的堆是用来存放对象的内存空间,几乎所有的Java对象、数组都存储在JVM的堆内存中。比...

  • 对象

    对象数据类型数组Array、对象object、正则Regexp 、new Date()对象数据类型存储在堆内存中开...

网友评论

      本文标题:对象在堆中的存储

      本文链接:https://www.haomeiwen.com/subject/sfgvattx.html