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

JUC: Java对象内存布局和对象头

4.9.1 面试题

12、你觉得目前面试,你还有那些方面理解的比较好,我没问到的,我说了juc和 jvm以及 同步锁机制

那先说juc吧,说下aqs的大致流程3、

14、cas自旋锁,是获取不到锁就一直自旋吗? cas和synchronized区别在哪里,为什么cas好,具体优势在哪里,我说cas避免cpu切换线程的开销,又问我在自旋的这个线程能保证一直占用cpu吗?假如cpu放弃了这个线程,不是还要带来线程再次抢占cpu的开销?

15、synchronized底层如何实现的,实现同步的时候用到cas了吗?具体哪里用到了

16、我说上个问题的时候说到了对象头,问我对象头存储哪些信息,长度是多少位存储

4.9.2 对象在堆内存中布局

在HotSpot虚拟机中,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header),实例数据(Instance Data),和对齐填充(Padding)

  • 对象实例
    • 对象头
      • 对象标记(Mark Word):HashCode,GC标记,GC存活次数,同步锁标记,偏向锁持有者
      • 类元信息(又叫类型指针):指向该对象类元数据(klass)的首地址
      • 长度(数组对象特有)
    • 实例数据(属性数据)
    • 对齐填充(保证8字节的倍数)

在64位系统中,Mark Word占用8字节,类元信息占用8字节,一共是16字节。

Object obj = new Object(); // obj占用16字节的数据

// 类元信息(类型指针)
Customer c1 = new Customer(); // c1中的类型指针指向了Customer类class Customer{ int id;  // 实例数据
}

JOL查看Java对象内存布局

<!-- JOL依赖 JOL查看Java对象内存布局-->
<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.9</version>
</dependency>
  • 两种方式
    • 开启偏向锁无等待 -XX:BiasedLockingStartupDelay=0
    • 使用Sleep
public class JOLTest {public static void main(String[] args) throws InterruptedException {Object o = new Object();TimeUnit.SECONDS.sleep(5);synchronized (o) {System.out.println(ClassLayout.parseInstance(o).toPrintable());}}
}

(1) 对象标记MarkWord

image

分代年龄最大为15,因为对象标记(MarkWord)中GC存活次数只占4个bit位,只能表示 0 ~ 15

http://www.hskmm.com/?act=detail&tid=21394

相关文章:

  • Manim实现波浪形文字特效
  • JUC: synchronized与锁升级
  • lang / philipino / feilvbin / taglog / tajialu
  • Windows上安装2个不同版本的MySQL5.7和8.4
  • cron表达式,每月1号凌晨3点执行和每周4凌晨3点半执行
  • 2025.9.30
  • C#/.NET/.NET Core技术前沿周刊 | 第 56 期(2025年9.22-9.28)
  • 反转链表
  • 天津港口海鲜之旅全攻略(2025最新版)
  • tomcat创建bat启动,结合任务计划实现自动重启tomcat服务 - 详解
  • 实用指南:【论文精读】Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector
  • Chromium V8类型混淆漏洞CVE-2025-10585安全分析
  • Claude 4.5 刚刚发布,能连肝 30 多个小时,史上最卷 AI 诞生
  • 香橙派5pro驱动开发(一)
  • Python 脚本遇到 SSL 证书问题
  • sa-token开发时遇到的问题
  • HR如何摆脱入离职事务性内耗?组织管理系统助力聚焦人才价值挖掘
  • 基于SpringAI构建大模型应用
  • C# TCP - 串口转发 - 实践
  • 【研发规范】Git 提交(commit)、CodeReview规范
  • PCIE 各个管脚的作用是什么?
  • Windows 11 局域网打印机共享设置
  • DailyPaper-2025-9-29
  • gpd winmax2 fedora42 睡眠秒唤醒问题
  • 国企人力资源管理系统怎么选?内行人推荐这8款,功能、服务双保障
  • spring service注入命名规则
  • 完整教程:基于岗课赛证的中职物联网专业“综合布线课程”教学解决方案
  • tensorflow加载和预处理信息
  • linux查询磁盘空间,查询指定目录的空间 df命令
  • 轻松规划房贷:用好公积金贷款,让梦想之家触手可及