0

0

在Java中对象头的mark word有什么用_Java锁标记位与GC标记关系说明

P粉602998670

P粉602998670

发布时间:2025-12-29 12:11:03

|

568人浏览过

|

来源于php中文网

原创

mark word 是 java 对象头中动态复用的 64 位核心字段,依对象状态存储哈希码、锁信息(偏向/轻量/重量级)或 gc 标记,通过锁状态位隔离不同用途,支撑 synchronized、hashcode 和垃圾回收协同运行。

在java中对象头的mark word有什么用_java锁标记位与gc标记关系说明

Mark Word 是 Java 对象头(Object Header)中最核心的字段之一,它不是固定存储某一种信息,而是根据对象当前状态动态复用同一块内存空间,主要服务于锁机制垃圾回收两大关键场景。

Mark Word 存什么:一格多用的动态结构

在 64 位 JVM 中,Mark Word 占 64 位(8 字节),但不会同时存满所有内容。它的布局随对象状态切换,典型用途包括:

  • 无锁状态:存放对象的哈希码(hashCode),仅在首次调用 hashCode() 后写入;若未调用,则这部分可被后续锁状态复用
  • 偏向锁状态:记录偏向线程 ID、偏向时间戳、是否启用偏向锁等,用于避免无竞争时的同步开销
  • 轻量级锁状态:存指向当前线程中锁记录(Lock Record)的指针,配合 CAS 实现快速加锁/解锁
  • 重量级锁状态:存指向 Monitor 对象的指针,此时锁已膨胀,进入操作系统级阻塞队列
  • GC 相关标记:如分代年龄(GC age)、是否处于 GC 标记阶段(如 CMS 的 mark-bit、G1 的 TAMS 指针辅助位)等,不同 GC 算法会按需复用低位

锁标记位与 GC 标记不冲突,靠状态位隔离

Mark Word 通过高几位(通常是 2–3 位)定义锁状态标志(lock bits),例如:

  • 001 → 无锁(normal)
  • 101 → 偏向锁(biased)
  • 000 → 轻量级锁(lightweight)
  • 010 → 重量级锁(heavyweight)

而 GC 使用的标记信息(如分代年龄占 4 位、GC 标志位占 1 位)被安排在其余空闲位上。JVM 严格约定:同一时刻只有一种主导状态生效,GC 运行期间会暂停应用线程(STW)或采用读屏障保障一致性,因此不会出现锁位与 GC 位互相覆盖或误读。

LibLib AI
LibLib AI

中国领先原创AI模型分享社区,拥有LibLib等于拥有了超多模型的模型库、免费的在线生图工具,不考虑配置的模型训练工具

下载

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

实际影响:你看不见,但它决定性能底线

Mark Word 的状态变化直接影响程序行为:

  • 频繁调用 hashCode() 后再加锁,可能触发锁膨胀(因哈希码已占用原偏向/轻量位)
  • 开启 -XX:-UseBiasedLocking 后,偏向锁位不再使用,节省了部分判断开销
  • G1 垃圾收集器在并发标记阶段会临时修改 Mark Word 的某些位(如设置 marked-in-bit),但仅在线程安全上下文中操作
  • 使用 JOL(Java Object Layout)工具可打印对象头,观察 Mark Word 实际值变化,验证锁升级过程

基本上就这些。它不暴露给开发者直接操作,却是 synchronized、hashCode、GC 三者协同运转的隐性枢纽。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

432

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

600

2023.08.10

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

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

723

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

485

2023.08.14

word背景色怎么改成白色
word背景色怎么改成白色

Word是微软公司的一个文字处理器软件。word为用户提供了专业而优雅的文档工具,帮助用户节省时间并得到优雅美观的结果。word提供了许多易于使用的文档创建工具,同时也提供了丰富的功能供创建复杂的文档使用。怎么word背景色怎么该呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3736

2023.07.21

word最后一页空白页怎么删除
word最后一页空白页怎么删除

word最后一页空白页删除方法有:通过删除回车符、调整页边距、删除分节符或调整分页符位置,您可以轻松去除最后一页的空白页。根据您实际的文档情况,选择适合您的方法进行操作,使您的文档更加美观和整洁。本专题为大家提供word最后一页空白页怎么删除不了相关的各种文章、以及下载和课程。

337

2023.07.24

word最后一页空白页怎么删除不了
word最后一页空白页怎么删除不了

word删除最后一页空白页,可以尝试使用Backspace键删除空白页,如果无效,查找和删除分页符,或者调整页面边距和行距。还可以尝试将文档保存为其他格式并重新打开和保存。本专题为大家提供word最后一页空白页为啥删除不了的相关的文章、下载、课程内容,供大家免费下载体验。

376

2023.07.25

word单页改变纸张方向
word单页改变纸张方向

word单页改变纸张方向:1、在界面上选择文档纸张方向;2、自定义页面设置;3、分节功能。本专题为大家提供word单页改变纸张方向的相关的文章、下载、课程内容,供大家免费下载体验。

624

2023.07.27

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

0

2026.03.03

热门下载

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

精品课程

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

共23课时 | 4.1万人学习

C# 教程
C# 教程

共94课时 | 10.6万人学习

Java 教程
Java 教程

共578课时 | 76万人学习

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

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