标签:javaJDK java 虚拟机 布局 数据 代码 程序
Java对象与JVM(二) Java对象在Java虚拟机中的内存布局一、对象头(Header)
对象头(Header)包括两个部分。
第一部分存储自身运行时数据,如:哈希码(Hash Code)、GC分代年龄、锁状态标志、线程持有锁、偏向线程id、偏向时间戳等。这部分官方称为“Mark Word”。
另一部分是类型指针,即对象指向它的类元数据的指针。虚拟机通过这个来确定这个对象是哪个类的实例。
二、实例数据(Instance Data)
实例数据(Instance Data),是存储对象真正的有效信息,也就是程序代码中所定义的各种类型字段内容。
三、对其填充(Padding)
对齐填充(Padding)并不是必须的,也没有特殊的含义,可以把这部分理解为占位符。
四、实例数据
对象真正存储的有效信息; 程序代码所定义的各种类型字段内容,以及包括父类继承或子类定义的; 存储顺序: 受到JVM分配策略参数(FiedAllocationStyle)和字段在Java源码中定义顺序影响; JVM默认分配策略为:longs/double、ints、short/char、boolean、oops(Ordiary Object Pointers); VM默认分配策略使得,相同宽度的字段总被分配到一起; 这个前提下,父类定义的变量出现在子类之前; 如果虚拟机的"CompactFields"参数为true,子类中较窄的变量可能插入到父类变量空隙中,以压缩节省空间;
五、对齐填充
不是必然存在的; 只起占位符作用,没有其他含义; HotSpot虚拟机要求对象大小必须是8字节的整数倍; 对象头是8字节整数倍,所以填充是对实例数据没有对齐的情况来说的;
标签:javaJDK,java,虚拟机,布局,数据,代码,程序 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。