详解Java对象的内存布局
前言今天来讲些抽象的东西 -- 对象头,因为我在学习的过程中发现很多地方都关联到了对象头的知识点,例如JDK中的 synchronized锁优化 和 JVM 中对象年龄升级等等。要深入理解这些知识的原理,了解对象头的概念很有必要,而且可以为后面分享 synchronized 原理和 JVM 知识的时候做准备。对象内存构成Java 中通过 new 关键字创建一个类的实例对象,对象存于内存的堆中并给其分配一个内存地址,那么是否想过如下这些问题:。可以看到,d对象实例共占据16byte,对象头占据12byte,其中 mark word占8byte,klass pointe 占4byte,另外剩余4byte是填充对齐的。jdk8及以后版本已经默认开启指针压缩,无需配置。在Mark Word中可以发现标记对象分代年龄的分配的空间是4bit,而4bit能表示的最大数就是2^4-1 = 15。
用户评论