当前位置: 首页 > article >正文

【jvm】java对象头

目录

          • 1. 构成部分
            • 1.1 Mark Word(标记字)
            • 1.2 类元数据指针(Class Metadata Pointer)
            • 1.3 数组长度(如果对象是数组)
          • 2. 大小

1. 构成部分
1.1 Mark Word(标记字)
  • 1.哈希码(Hash Code):用于支持快速查找,例如在HashMap等集合类中。
  • 2.GC分代年龄(GC Age):用于记录对象在垃圾回收中的存活时间,帮助JVM决定何时进行晋升(例如从年轻代晋升到老年代)。
  • 3.锁状态标志:用于支持多线程同步,例如轻量级锁、重量级锁、偏向锁等。
  • 4.偏向线程ID:当对象被某个线程持有偏向锁时,存储该线程的ID。
  • 5.类元数据指针:指向对象所属类的元数据信息(在Java 8及以后,元数据的存储由方法区中的类型信息指针指向)。
1.2 类元数据指针(Class Metadata Pointer)
  • 1.在Java 8之前,这个指针指向方法区中的类型信息(也称为方法表)。
  • 2.在Java 8及以后,由于元空间的引入,这个指针指向的是元空间中的类型信息。它包含了类的元数据,如类的方法、字段、父类、接口等。
1.3 数组长度(如果对象是数组)
  • 1.如果对象是一个数组,对象头中还会包含一个额外的字段来存储数组的长度。
2. 大小
  • 1.对象头的大小并不是固定的,它依赖于JVM的实现和具体的平台(如32位或64位系统)。
  • 2.在64位JVM中,对象头通常是12字节或16字节(依赖于JVM的具体实现):
    a.普通对象(非数组):在64位JVM中,对象头通常是12字节(Mark Word占8字节,类元数据指针占4字节)。
    b.数组对象:在64位JVM中,对象头通常是16字节(Mark Word占8字节,类元数据指针占4字节,数组长度占4字节)。

http://www.kler.cn/a/408468.html

相关文章:

  • 【食品包装原纸】市场未来几年行业竞争将更加激烈,尤其在中国市场
  • AIGC学习笔记(6)——AI大模型开发工程师
  • MongoDB比较查询操作符中英对照表及实例详解
  • 文件操作详解(1)
  • 【人工智能】AutoML自动化机器学习模型构建与优化:使用Auto-sklearn与TPOT的实战指南
  • YOLOv11融合[NeurlS2022]递归门控卷积gnconv模块及相关改进思路
  • C指针之舞——指针探秘之旅(2)
  • CentOS 7安装SSHFS 实现远程主机目录 挂载为本地目录
  • 计网-命令行实现收发邮件
  • 【算法】BFS解决最短路径问题
  • Python脚本消费多个Kafka topic
  • WebStorm 2024.3/IntelliJ IDEA 2024.3出现elementUI提示未知 HTML 标记、组件引用爆红等问题处理
  • Spring Boot OA管理系统:提升企业运营效率
  • 【Stable Diffusion】 超大尺寸绘制、分区控制,详解Tiled Diffusion VAE插件功能
  • 人工智能大趋势下软件开发的未来
  • 【论文复现】BERT模型解读与简单任务实现
  • RabbitMQ3:Java客户端快速入门
  • MariaDB面试题及参考答案
  • 【OpenGL】GLFW环境配置 + 扩展GLFW使其可以成为MFC子窗口
  • C0033.在Ubuntu中配置clion的环境
  • 数据集-目标检测系列- 安全背心 检测数据集 safety_vests >> DataBall
  • docker desktop上下载的镜像传到虚拟机上使用
  • Python编程整理汇总(基础汇总版)
  • sed使用扩展正则表达式时, -i 要写在 -r 或 -E 的后面
  • Window11系统下修改Anaconda3默认安装虚拟环境在C盘问题
  • C++设计模式——Singleton单例模式