Java对象内存布局和对象头

10、Java对象内存布局和对象头

10.1 先从阿里及其它大厂面试题说起

10.2 周志明老师JVM第3版

10.3 对象在堆内存中的存储布局

10.4 对象标记Mark Word保存什么

10.5 参考尚硅谷宋红康老师原图

10.6 Hotspot术语表官网

http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html

10.7 底层源码理论证明

http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/89fb452b3688/src/share/vm/oops/oop.hpp

  • _mark字段是mark word,_metadata是类指针klass pointer,对象头(object header)即是由这两个字段组成,这些术语可以参考Hotspot术语表。

10.8 32位(看一下即可,不用学了,以64位为准)

10.9 64位重要

10.9.1 oop.hpp

10.9.2 markOop.hpp

10.9.3 markword(64位)分布图,对象布局、GC回收和后面的锁升级就是对象标记MarkWord里面标志位的变化

10.10 JOL POM

1
2
3
4
5
6
7
8
9
<!--
官网:http://openjdk.java.net/projects/code-tools/jol/
定位:分析对象在JVM的大小和分布
-->
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>

10.11 JOL 小试一下

10.12 默认开启压缩说明

10.12.1 结果

10.13 手动关闭压缩再看看结果

10.14 换成其他对象试试结果