0

0

java中对象头的用法

舞夢輝影

舞夢輝影

发布时间:2025-12-23 13:57:08

|

779人浏览过

|

来源于php中文网

原创

Java对象头由Mark Word和类型指针组成,参与锁升级并影响GC与内存布局,开发者不可直接访问,仅能通过identityHashCode、synchronized等间接感知其作用。

java中对象头的用法

Java中对象头不直接供开发者使用,它是JVM内部管理对象的关键元数据区域,主要服务于内存布局、锁机制和GC等底层功能。

对象头包含哪些内容

在HotSpot虚拟机中,普通对象的对象头通常由两部分组成:

  • Mark Word(标记字段):存储哈希码、GC分代年龄、锁状态标志、线程持有的锁指针等。大小为32位(32位JVM)或64位(64位JVM,开启指针压缩时也占64位,但部分信息被压缩存放)。
  • Class Metadata Address(类型指针):指向该对象所属类的Klass结构体地址,用于确定对象类型、方法表、继承关系等。开启指针压缩时占4字节,否则占8字节。

数组对象还会额外多一个4字节的数组长度字段,放在类型指针之后。

对象头如何参与锁升级

对象头中的Mark Word是Java synchronized实现轻量级锁、偏向锁、重量级锁的核心载体:

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

  • 新建对象默认处于“无锁”状态,Mark Word存对象哈希码(未计算时为0)和分代年龄等。
  • 第一次被同一线程加锁时,可能进入“偏向锁”,Mark Word记录该线程ID;撤销偏向后可升级为“轻量级锁”,存指向中锁记录的指针。
  • 竞争激烈时膨胀为“重量级锁”,Mark Word改为指向ObjectMonitor对象的指针。

这些转换全部发生在Mark Word内,无需额外内存分配,是JVM锁优化的关键设计。

思高数码广场
思高数码广场

修订记录:1.用户登陆增加了验证码,提高了安全性,登陆后不再显示登陆框。2.修改成了相对路径,不再一定需要放置在网站根目录下面。3.修改了类别搜索功能,并且可以暂时屏蔽,而不是删除,修改了先增加大类后出现无法修改中类名称的bug。4.增加了产品修改,可以保存修改。5.原来是借用别人的流量统计系统,不能统计某个页面的访问量,现采用的count.seecool.net的流量统计。6.帮助中心采用了fa

下载

为什么不能直接访问对象头

Java语言层不暴露对象头操作接口。虽然可通过Unsafe类(如unsafe.getAddress(obj, offset))配合固定偏移读取Mark Word,但这是非安全、非标准、易出错的做法:

  • 偏移量随JVM版本、是否开启指针压缩、是否为数组等动态变化,不可移植。
  • JIT编译器可能重排序、优化或消除相关代码,行为不确定。
  • 违反Java内存模型语义,可能导致并发问题或崩溃。

除非开发JVM工具(如调试器、Profiler)、写底层框架(如高性能序列化库),否则不应尝试读写对象头。

开发者能间接感知对象头的场景

虽不直接操作,但以下情况背后都依赖对象头:

  • 调用System.identityHashCode():首次调用会将哈希码写入Mark Word(若尚未被锁占用)。
  • 使用synchronized:锁的获取与释放全程修改Mark Word内容。
  • GC标记阶段:部分GC算法利用Mark Word中的分代年龄判断对象是否晋升到老年代。
  • 对象内存占用估算:比如用JOL(Java Object Layout)工具查看对象大小时,输出的“header size”就是对象头所占字节数。

基本上就这些。理解对象头不是为了手动操控它,而是读懂JVM行为、排查锁争用、分析内存开销的底层基础。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java
java

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

866

2023.06.15

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

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

745

2023.07.05

java自学难吗
java自学难吗

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

741

2023.07.31

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

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

398

2023.08.01

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

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

420

2023.08.02

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

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

447

2023.08.02

java有什么用
java有什么用

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

431

2023.08.02

java在线网站
java在线网站

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

16947

2023.08.03

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

70

2026.01.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.9万人学习

C# 教程
C# 教程

共94课时 | 7.6万人学习

Java 教程
Java 教程

共578课时 | 51.2万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号