Java对象结构
Java 对象(Object 实例)结构包括三部分:对象头、对象体、对齐字节。

Object的三个部分
对象头包括三个字段,第一个字段叫做 Mark Word(标记字),用于存储自身运行时的数据 例如 GC 标志位、哈希码、锁状态等信息。
第二个字段叫做 Class Pointer(类对象指针),用于存放方法区 Class 对象的地址,虚拟机通过这个指针来确定这个对象是哪个类的实例。
第二个字段叫做 Array Length(数组长度)。如果对象是一个 Java 数组,那么此字段必须有, 用于记录数组长度的数据;如果对象不是一个 Java 数组,那么此字段不存在,所以这是一个可选字段。
对象体包含了对象的实例变量(成员变量)。用于成员属性值,包括父类的成员属性值。这部分内存按 4 字节对齐。
对齐字节也叫做填充对齐,其作用是用来保证 Java 对象在所占内存字节数为 8 的倍数(8N bytes)。HotSpot VM 的内存管理要求对象起始地址必须是 8 字节的整数倍。对象头本身是 8 的倍数,当对象的实例变量数据不是 8 的倍数,便需要填充数据来保证 8 字节的对齐。
对象结构中的核心字段
-
Mark Word(标记字)字段主要用来表示对象的线程锁状态,另外还可以用来配合 GC、 存放该对象的 hashCode。
-
Class Pointer(类对象指针)字段是一个指向方法区中 Class 信息的指针,意味着该对象可随时知道自己是哪个 Class 的实例。
-
Array Length(数组长度)字段也占用 32 位(在 32 位 JVM 中)的字节,这是可选的, 只有当本对象是一个数组对象时才会有这个部分。
-
对象体用于保存对象属性值,是对象的主体部分,占用的内存空间大小取决于对象的属性数量和类型。
-
对齐字节并不是必然存在的,也没有特别的含义,它仅仅起着占位符的作用。当对象实例数据部分没有对齐(8 字节的整数倍)时,就需要通过对齐填充来补全。
对象结构中的字段长度
Mark Word、Class Pointer、Array Length 等字段的长度,都与 JVM 的位数有关。Mark Word 的长度为 JVM 的一个 Word(字)大小,也就是说 32 位 JVM 的 Mark Word 为 32 位,64 位 JVM 为 64 位。Class Pointer(类对象指针)字段的长度也为 JVM 的一个 Word(字)大小,即 32 位的 JVM为32位,64位的JVM为64位。
所以,在 32 位 JVM 虚拟机中,Mark Word 和 Class Pointer 这两部分都是 32 位的;在 64 位 JVM 虚拟机中,Mark Word 和 Class Pointer 这两部分都是 64 位的。
对于对象指针而言,如果 JVM 中对象数量过多,使用 64 位的指针将浪费大量内存,通过简单统计,64 位的 JVM 将会比 32 位的 JVM 多耗费 50%的内存。为了节约内存可以使用选项 +UseCompressedOops 开启指针压缩。选项 UseCompressedOops 中的 Oop 部分为 Ordinary object pointer 普通对象指针的缩写。
如果开启 UseCompressedOops 选项,以下类型的指针将从 64 位压缩至 32 位:
-
Class 对象的属性指针(即静态变量)
-
Object 对象的属性指针(即成员变量)
-
普通对象数组的元素指针
当然,也不是所有的指针都会压缩,一些特殊类型的指针不会压缩,比如指向 PermGen(永久代)的 Class 对象指针(JDK8 中指向元空间的 Class 对象指针)、本地变量、堆栈元素、入参、返回值和 NULL 指针等。
如果对象是一个数组,那么对象头还需要有额外的空间用于存储数组的长度(Array Length 字段)。Array Length 字段的长度也随着 JVM 架构的不同而不同:32 位的 JVM 上,长度为 32 位; 64 位 JVM 则为 64 位。64 位 JVM 如果开启了 Oop 对象的指针压缩,Array Length 字段的长度也将由64位压缩至32位。
Mark Word的结构信息
Java 内置锁的涉及到很多重要信息,这些都存放在对象结构中,并且是存放于对象头的 Mark Word 字段中。Mark Word 的位长度为 JVM 的一个 Word 大小,也就是说 32 位 JVM 的 Mark word 为 32 位,64 位 JVM 为 64 位。Mark Word 的位长度不会受到 Oop 对象指针压缩选项的影响。
Java 内置锁的状态总共有四种,级别由低到高依次为:无锁,偏向锁,轻量级锁,重量级锁。
其实在 JDK1.6 之前,Java 内置锁还是一个重量级锁,是一个效率比较低下的锁,在 JDK1.6 之 后,JVM 为了提高锁的获取与释放效率,对 synchronized 的实现进行了优化,引入了偏向锁、轻 量级锁的实现,从此以后 Java 内置锁的状态就有了四种(无锁、偏向锁、轻量级锁、重量级锁), 并且四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级,也就是说只能进 行锁升级(从低级别到高级别)。
64位锁结构信息

lock:锁状态标记位
占 2 个二进制位,由于希望用尽可能少的二进制位表示尽可能多 的信息,所以设置了 lock 标记。该标记的值不同,整个 Mark Word 表示的含义不同。
biased_lock
对象是否启用偏向锁标记,只占 1 个二进制位。为 1 时表示对象启用偏向锁,为 0 时表示对象没有偏向锁。
lock 和 biased_lock 两个标记位组合在一起,共同表示 Object 实例处于什么样的锁状态。二者组合的含义如下:

age
4位的 Java 对象分代年龄。在 GC 中,如果对象在 Survivor 区复制一次,年龄增加 1。当对象达到设定的阈值时,将会晋升到老年代。默认情况下,并行 GC 的年龄阈值为 15,并发 GC 的年龄阈值为 6。由于 age 只有 4 位,所以最大值为 15,这就是-XX:MaxTenuringThreshold 选 项最大值为 15 的原因。
identity_hashcode
31 位的对象标识 HashCode(哈希码),采用延迟加载技术,当调用 Object.hashCode()方法或者 System.identityHashCode() 方法计算对象的 HashCode 后,其结果将 被写到该对象头中。当对象被锁定时,该值会移动到 Monitor(监视器)中。
thread
54 位的线程 ID 值,为持有偏向锁的线程 ID。
epoch
偏向时间戳。
ptr_to_lock_record
占 62 位,在轻量级锁的状态下,指向栈帧中锁记录的指针。
ptr_to_heavyweight_monitor
占 62 位,在重量级锁的状态下,指向对象监视器 Monitor的指针。
相关文章:
Java对象结构
Java 对象(Object 实例)结构包括三部分:对象头、对象体、对齐字节。 Object的三个部分 对象头包括三个字段,第一个字段叫做 Mark Word(标记字),用于存储自身运行时的数据 例如 GC 标志位、哈希码、锁状态等信息。 第二个字段叫做 Class Pointer(类对象…...
基于redis的分布式锁实现方案
3. 基于redis的分布式锁实现方案: redis集群,原理是因为redis单线程串行处理. (1). SETNX方案: ①. SETNX(Set if not exists):a. 命令在指定的key不存在时,为key设置指定的值.b. SETNX Key Value设置成功,返回1.设置失败,返回0.c. 没有有效期的②. 原子操作(多个执行命令):Mu…...
基于JAVA+SpringBoot的线上智能问诊就医平台
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 智慧医药系统…...
adb: error: cannot create file/directory ‘d:/1.png‘: No such file or directory
将文件从设备读取到PC 由于权限问题,不能直接pull到电脑磁盘根目录,否则会报错: adb pull <remote> <local> eg: C:\Users\admin>adb pull /sdcard/server.log C:\Users\admin\Desktop /sdcard/server.log: 1 file pulled.…...
Pelee: A Real-Time Object Detection System on Mobile Devices(CVPR 2019)
文章目录 年三十AbstractIntroductionPeleeNet:一个高效的特征提取网络架构消融实验数据集不同设计选择对性能的影响 在ImageNet ILSVRC 2012上的结果真实设备上的速度 Pelee:实时目标检测系统Overview在VOC 2007上的结果不同设计选择的影响与其他框架的比较真实设备…...
分布式理论 | RPC | Spring Boot 整合 Dubbo + ZooKeeper
一、基础 分布式理论 什么是分布式系统? 在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”; 分布式系统是由一组通过网络进行通信、为了完成共同的…...
局域网其他pc如何访问宿主机虚拟机IP?
文章目录 背景贝瑞蒲公英设置虚拟机网络连接测试 背景 使用贝瑞蒲公英异地组网,将家里的pc作为pgsql服务器在公司使用,但是虚拟机的ip和端口访问不了 贝瑞蒲公英 设置虚拟机网络 就是添加端口转发规则 连接测试 公网内其他pc连接测试 可以看到已经连接成…...
U8 语法制导翻译技术
文章目录 一、总述二、翻译文法1、概念 三、语法制导翻译1、概念2、带属性的翻译文法3)综合属性4)继承属性5)举例 3、 L-属性翻译文法(L-ATG)1)概念2)求值规则 4、简单赋值形式的L-ATGÿ…...
剑指offer A + B
剑指offer A B 题目 输入两个整数,求这两个整数的和是多少。 输入格式 输入两个整数A,B,用空格隔开,0≤A,B≤10的8次幂 输出格式 输出一个整数,表示这两个数的和 样例输入: 3 4样例输出: 7参考答…...
gitlab(gitlab-ce)下载,离线安装
目录 1.下载 2.安装 3.配置 4.启动 5.登录 参考: 1.下载 根据服务器操作系统版本,下载对应的RPM包。 gitlab官网: The DevSecOps Platform | GitLab rpm包官网下载地址: gitlab/gitlab-ce - Results in gitlab/gitlab-ce 国内镜像地…...
Jmeter接口测试断言
一、响应断言 对服务器的响应接口进行断言校验,来判断接口测试得到的接口返回值是否正确。 二、添加断言 1、apply to: 通常发出一个请求只触发一个请求,所以勾选“main sampie only”就可以;若发一个请求可以触发多个服务器请…...
Temu、Shein、OZON测评自养号,IP和指纹浏览器的优缺点分析
随着全球电子商务的飞速发展,跨境电商环境展现出巨大的潜力和机遇。然而,跨境卖家们也面临着更激烈的竞争、更严格的规定和更高的运营成本等挑战。为了在这个环境中脱颖而出,一些卖家尝试使用自动脚本程序进行浏览和下单。然而,这…...
亚信科技AntDB数据库——深入了解AntDB-M元数据锁的相关概念
AntDB-M在架构上分为两层,服务层和存储引擎层。元数据的并发管理集中在服务层,数据的存储访问在存储引擎层。为了保证DDL操作与DML操作之间的一致性,引入了元数据锁(MDL)。 AntDB-M提供了丰富的元数据锁功能ÿ…...
yolov5 deepsort-船舶目标检测+目标跟踪+单目测距+速度测量
目标跟踪是一种计算机视觉技术,通过分析图像或视频数据中的目标,实时追踪目标的位置和运动轨迹。在本文中,我们将详细介绍目标跟踪的原理、方法和应用,并探讨其在各个领域中的潜在价值。 1. 目标跟踪技术的基本原理 目标跟踪技术的…...
Wireshark与其他工具的整合
第一章:Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧:过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章:网络协议分析 2.1 网络协议分析:TCP、UDP、ICMP等 2.2 高级协议分析:HTTP…...
DDD架构实践
ddd架构浅析 背景介绍 什么是ddd架构,是以ddd思想为参考,做出一份符合ddd思想的框架。 随着技术的迭代升级,越来越多的瓶颈暴露出来,性能瓶颈,系统复杂度瓶颈,这些都逐一被迭代出的技术产物解决。最终的…...
Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)
近日,Bert-vits2-v2.2如约更新,该新版本v2.2主要把Emotion 模型换用CLAP多模态模型,推理支持输入text prompt提示词和audio prompt提示语音来进行引导风格化合成,让推理音色更具情感特色,并且推出了新的预处理webuI&am…...
认识缓存,一文读懂Cookie,Session缓存机制。
🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…...
关于react native项目中使用react-native-wechat-lib@3.0.4
关于react native项目中使用react-native-wechat-lib3.0.4 插件官网安装依赖包(Android和iOS下载插件完成后记得更新依赖,)Android中配置1.在项目文件夹下面创建文件夹wxapi(如上图)2.在文件MainApplication.java中如下…...
【LeetCode刷题笔记(8-1)】【Python】【接雨水】【动态规划】【困难】
文章目录 引言接雨水题目描述提示 解决方案1:【动态规划】结束语 接雨水 引言 编写通过所有测试案例的代码并不简单,通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例,但如果不了解代码背后的思考过程,那么这些代…...
102. 在控制平面主机名更改后恢复 Rancher 配置的 RKE2 集群
Environment 环境 Rancher provisioned RKE2 downstream cluster control plane node hostname changed, without removing the node from the cluster. Rancher 配置了 RKE2 下游集群控制平面节点的主机名更改,但未将该节点从集群中移除。 Procedure 程序It is …...
新手福音:在快马平台开启你的云端代码编程第一课
作为一名刚接触编程的新手,我最近发现了一个特别适合入门的学习方式——云端代码编程。以前总觉得学编程要先装一堆软件、配置环境,光是这些准备工作就能劝退不少人。但在InsCode(快马)平台上,这些烦恼都不存在了。 零门槛的编程初体验 打开平…...
如何快速清理Windows 11臃肿:Win11Debloat完整优化指南
如何快速清理Windows 11臃肿:Win11Debloat完整优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and c…...
从“看见光点”到“看懂世界”:视觉重建让这个世界变得更近一些
三十多年前,“让盲人重新看见”更像一句带有未来感的科学想象。而今天,这件事已经进入临床试验和真实的人体研究。视觉重建之所以被视为脑机接口里最具挑战性的方向之一,不只是因为它要解决“能不能刺激大脑”的问题,更因为它要回…...
别再用默认字典了!DVWA暴力破解实战:从Low到High,手把手教你配置Burp Suite的Pitchfork模式
别再用默认字典了!DVWA暴力破解实战:从Low到High,手把手教你配置Burp Suite的Pitchfork模式 在渗透测试的入门阶段,暴力破解往往是最先接触的攻击手段之一。但许多新手在DVWA的High级别面前束手无策——那些看似简单的登录表单&am…...
便利店老板的备货神器——基于粒子群优化支持向量机的单日关东煮销量预测
基于粒子群优化支持向量机(PSO-SVM)的时间序列预测 PSO-SVM时间序列 matlab代码暂无Matlab版本要求 -- 推荐 2018B 版本及以上 采用 Libsvm 工具箱(无需安装,可直接运行),仅支持 Windows 64位系统昨天便利店刚进了一箱新口味的魔芋…...
告别恼人红叉!保姆级教程:用acme.sh给宝塔面板IP地址换上Let‘s Encrypt免费证书
从红叉到绿锁:零成本为宝塔面板IP地址部署可信SSL证书全指南 每次打开宝塔面板,那个刺眼的红色安全警告是否让你如鲠在喉?作为服务器管理员,我们比谁都清楚自签名证书的实际安全性,但浏览器固执的警告提示却让新手用户…...
Qwen3.5-9B-AWQ-4bit惊艳效果:多对象复杂场景图中主次关系与逻辑推断展示
Qwen3.5-9B-AWQ-4bit惊艳效果:多对象复杂场景图中主次关系与逻辑推断展示 1. 模型能力概览 千问3.5-9B-AWQ-4bit是一款突破性的多模态AI模型,它能够像人类一样"看懂"图片并做出智能分析。不同于传统图像识别工具,这个模型最令人惊…...
Mermaid Live Editor:5分钟掌握专业图表制作的在线实时编辑器
Mermaid Live Editor:5分钟掌握专业图表制作的在线实时编辑器 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…...
Go语言实现SHA256加密的避坑指南:从常量初始化到循环优化
Go语言实现SHA256加密的避坑指南:从常量初始化到循环优化 在区块链、数字签名和密码保护等领域,SHA256算法因其高安全性被广泛应用。作为Go语言开发者,理解并正确实现SHA256加密不仅关乎功能实现,更直接影响系统性能和安全性。本文…...
