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

Java中的对象布局(Object Layout)包含哪些部分_补齐填充与头部说明

冬伟吖_8669

冬伟吖_8669

发布时间:2026-03-12 11:20:03

|

599人浏览过

|

来源于php中文网

原创

Java对象头包含Mark Word和Class Pointer(普通对象)或额外Array Length字段(数组对象),其大小受压缩指针开关影响:开启时普通对象头12字节,关闭时16字节;空Object因需8字节对齐而占16字节。

java中的对象布局(object layout)包含哪些部分_补齐填充与头部说明

对象头里到底存了啥

Java对象在堆内存里的布局,对象头是第一部分,它不是固定大小,而是分两种情况:普通对象和数组对象。普通对象头包含 Mark Word 和 Class Pointer;数组对象多一个 Array Length 字段(4字节)。Mark Word 会复用存储锁状态、GC分代年龄、哈希码等信息,具体存什么取决于当前锁状态——比如无锁时存哈希码,轻量级锁时存指向栈中锁记录的指针。

注意:开启 -XX:+UseCompressedClassPointers(默认开启)时,Class Pointer 占4字节而非8字节;但若堆大于32GB,压缩指针失效,它就变成8字节。这直接影响对象头总长,进而影响后续字段对齐。

  • 64位 JVM + 压缩类指针 + 普通对象 → 对象头 = 8(Mark Word) + 4(Class Pointer) = 12 字节
  • 64位 JVM + 关闭压缩类指针 → 对象头 = 8 + 8 = 16 字节
  • 数组对象额外 + 4 字节 Array Length

字段对齐与补齐填充怎么算

JVM要求对象起始地址必须是8字节的整数倍,同时每个字段也要按自身宽度自然对齐(比如 long 和 double 要求8字节对齐)。字段按宽度从大到小排序后插入(HotSpot 实现),再在末尾补零,凑够8字节倍数。

举个例子:class A { byte a; long b; int c; } 字段排布不是按声明顺序,而是先放 b(8字节),再放 c(4字节),再放 a(1字节),最后补7字节填充 → 总大小 = 8 + 4 + 1 + 7 = 20 字节,但对象总大小必须是8的倍数,所以最终是24字节。

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

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
  • 字段重排序只发生在对象实例字段之间,不包括父类字段(父类字段在前,子类字段在后)
  • 静态字段、常量池、方法区内容不参与对象布局计算
  • 使用 -XX:+PrintFieldLayout 可直接打印 HotSpot 的字段排布结果,比手动算靠谱

为什么 java.lang.Object 占16字节

空对象也要满足对齐要求。Object 没有实例字段,只有对象头。在默认压缩指针下,对象头共12字节(8+4),但12不是8的倍数,所以 JVM 在末尾加4字节填充 → 总大小16字节。

这个“16字节”是常见误区来源:有人以为是头占16,其实是头+填充。一旦你加一个 byte 字段,对象大小不会变成17,而是仍为16(因为 byte 塞进填充区),直到填满才扩容。

  • new Object() → 16 字节
  • class B { byte x; } → 还是 16 字节(x 填进那4字节空隙)
  • class C { byte x; long y; } → 24 字节(y 需要8字节对齐,前面12字节头 + 1字节x + 3填充 + 8字节y = 24)

排查布局问题时最容易忽略的点

对象大小不是靠 sizeof 或反射能直接拿到的,必须用工具。JOL(Java Object Layout)是事实标准,但要注意它的输出依赖 JVM 参数,尤其是是否启用压缩指针、是否开启分层编译等。

另一个坑是:对象数组(Object[])本身是对象,其元素引用是4或8字节,但引用指向的每个 Object 实例又各自占16字节——这里容易把“数组对象大小”和“数组里所有元素总内存”混为一谈。

  • 别信 IDE 的“估算大小”,它不考虑对齐和填充
  • Instrumentation.getObjectSize() 返回的是 shallow size(不含引用对象),且不反映实际内存布局细节
  • 用 JOL 看布局前,先确认 JVM 启动参数和目标 JDK 版本,不同版本字段排序策略可能微调

对象布局真正麻烦的地方不在结构本身,而在它被 JVM 实现细节、CPU 缓存行、GC 算法共同牵制——改一个字段类型,可能让填充变多、缓存局部性变差、GC 扫描成本上升。这些影响往往藏在压测数据里,而不是日志里。

热门AI工具

更多
墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

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

DeepSeek

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

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

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

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

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

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

10017

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

7142

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

6292

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1084

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

908

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1316

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2629

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

19951

2023.08.03

PixPix官网入口合集
PixPix官网入口合集

本专题汇总了PixPix官网在线使用入口及平台功能详解,涵盖文生图、图生图、AI图片编辑、AI视频创作等核心能力,并整理了AI爆款图片复刻、商品套图、详情页生成、视频变清晰与去水印等电商专项工具的使用教程。同时收录了PixPix MCP接入Codex、Claude Code等主流Agent的操作指南,助您一站式完成AI图片与视频创作。

0

2026.10.09

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

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

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