各位观众老爷,晚上好!我是你们今晚的 Java 内存布局导游,今天咱们不聊诗和远方,就聊聊你写的对象在 JVM 里面是怎么安家的。 开场白:对象,你的家在哪里? 咱们 Java 程序员,天天 new 对象,new 得不亦乐乎。但是,你有没有想过,new 出来的对象,它住在哪里?它的房间长什么样?邻居都是谁?今天,我们就来扒一扒 Java 对象的底裤,啊不,是内存布局。 第一站:对象的基本结构——三室一厅 Java 对象在堆内存里,至少有这么三部分: 对象头 (Object Header): 这是对象的门牌号,记录着对象的身份信息。 实例数据 (Instance Data): 这是对象真正存储数据的地方,也就是对象的属性。 对齐填充 (Padding): 这是为了让对象的大小是 8 字节的倍数,方便 CPU 读取,就像装修房子的时候,为了美观做的填缝一样。 我们暂且把它们比作“三室一厅”。对象头是客厅,实例数据是卧室,对齐填充是卫生间(虽然有点不雅,但是形象啊!)。 第二站:客厅——对象头 (Object Header) 对象头是重中之重,它包含了两部分: Mark Word: 这玩意儿 …
继续阅读“Java `Object Layout` (`Object Header`, `Mark Word`, `Klass Pointer`) 与内存对齐”