关于对象头以及Synchronized锁状态的理解

本文探讨了Java对象头的组成,特别是MarkWord在不同锁状态下的表示,包括无锁、偏向锁、轻量级锁和重量级锁。通过分析锁状态的转换,如偏向锁的获取与释放,以及轻量级锁的升级过程,阐述了JVM中同步机制的实现细节。
摘要由CSDN通过智能技术生成

最近在看OpenJdk的源码,对对象头部分有了一个更直观的理解。同时,对象头中的MarkWord部分,又包含了对不同锁状态的标识,故以此为起点,梳理下不同锁状态的表示及不同锁状态的转换。

1、对象头

    JVM内部,使用 OOP-Klass 二分模型来表示类和对象,OOP用来表示Java对象实例,Klass用来表示Java类。在Java应用程序运行过程中,每创建一个Java对象,在JVM内部就会相应地创建一个OOP对象来对应(具体为instanceOopDesc对象)。而每加载一个Java类,也会对应创建一个Klass对象来对应(具体为instanceKlass对象)。

    Java对象在内存中的布局,可分为连续的两部分:instanceOopDesc + 实例数据。数组对象为:arrayOopDesc + 实例数据。

对象的内存布局

    这里的 instanceOopDesc 与 arrayOopDesc,即为对象头。对象头中的Mark Word,即 OopDesc 基类中的 _mark 成员,存储对象运行时信息,如Hash Code、Age、锁状态标识、线程持有的锁、偏向线程ID、偏向时间戳等。对象头中的元数据指针,即 OopDesc 基类中的 _metadata 成员,指向描述对象所对应 Java 类的 Klass 对象。

2、锁状态<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值