讲师中心 微信公众号
AI工具推荐 视频效率加速

探究Java对象在内存中的组成部分及对象头结构

阿静姑娘_2414

阿静姑娘_2414

发布时间:2026-03-24 11:15:11

|

859人浏览过

|

来源于php中文网

原创

Java对象内存由对象头、实例数据和对齐填充三部分组成;对象头含Mark Word(存哈希码、锁状态等)和类型指针(指向Klass结构),数组对象额外含4字节长度字段;64位JVM默认压缩指针使类型指针占4字节,对象需8字节对齐,不足则填充。

探究java对象在内存中的组成部分及对象头结构

Java对象在内存中主要由三部分组成:对象头(Object Header)、实例数据(Instance Data)和对齐填充(Padding)。其中,对象头是JVM管理对象的核心元数据区域,直接影响锁机制、GC标记、哈希码生成等关键行为。

对象头包含哪些字段

对象头通常分为两部分:Mark Word 和 Class Metadata Address(类型指针)。

  • Mark Word:大小为一个机器字长(32位JVM为4字节,64位默认为8字节),存储内容动态变化,包括:对象哈希码(未锁定时)、GC分代年龄、锁状态标志(无锁/偏向锁/轻量级锁/重量级锁)、线程ID(偏向锁模式下)、指向Monitor的指针(重量级锁)等;
  • Class Metadata Address:即类型指针,指向该对象所属类的Klass结构在方法区(元空间)中的地址,用于确定对象类型、支持多态和反射;
  • 在数组对象中,对象头还会额外包含一个4字节的数组长度字段,紧随类型指针之后。

64位JVM下的对象头布局(默认开启指针压缩)

HotSpot JVM在64位平台默认启用CompressedOops(压缩指针),使对象引用占4字节而非8字节。此时对象头典型布局如下:

  • Mark Word:8字节(64位);
  • Class Pointer:4字节(压缩后);
  • 数组长度(仅数组对象):4字节;
  • 后续紧跟实例字段(按宽度从大到小排列,并考虑CPU缓存行对齐)。

注意:关闭指针压缩(-XX:-UseCompressedOops)后,Class Pointer变为8字节,对象头整体变大,可能影响内存占用与缓存局部性。

立即学习“Java免费学习笔记(深入)”;

对象内存对齐与填充的作用

JVM要求对象起始地址必须是8字节的整数倍(即按8字节对齐),这是由硬件内存访问特性决定的。若对象头加实例数据总大小不是8的倍数,JVM会在末尾自动添加填充字节(Padding)。

  • 例如:一个只有1个boolean字段的对象,在64位+压缩指针环境下,对象头共12字节(8+4),实例数据1字节,合计13字节 → 补5字节填充至16字节对齐;
  • 填充不存储有效数据,但能提升CPU读取效率,避免跨缓存行访问带来的性能损耗。

如何查看实际对象内存布局

可通过JOL(Java Object Layout)工具验证。例如:

mvn org.openjdk.jol:jol-cli:0.16:run -Dexec.args="java.lang.String"

输出会显示对象头各字段偏移、大小、实例字段布局及总占用内存。调试时建议配合-XX:+UseSerialGC(避免G1等复杂GC干扰布局)和-XX:-UseCompressedOops(便于观察原始结构)对比分析。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

2090

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

143

2025.11.30

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

315

2025.11.27

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

319

2026.04.23

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

3316

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

286

2025.12.06

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

3638

2023.08.10

css中的padding属性作用
css中的padding属性作用

在CSS中,padding属性用于设置元素的内边距。想了解更多padding的相关内容,可以阅读本专题下面的文章。

2412

2023.12.07

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn