一文读懂JAVA锁机制 ,锁升级,锁膨胀

本文深入解析Java中的锁机制,包括无锁、偏向锁、轻量级锁和重量级锁。偏向锁适用于无竞争场景,轻量级锁通过自旋避免阻塞,而重量级锁则采用互斥量和阻塞队列。锁升级过程涉及线程状态的转换和锁信息的更新,旨在优化并发性能。
摘要由CSDN通过智能技术生成

Java中锁的机制

2020127

14:24

 

目录

-

- 1. 概要

- 2. 对象头

- 3. 四种锁

    - 3.1 偏向锁【线程ID 1|01】

    - 3.2 轻量级锁【指向栈锁记录的指针 |00】

    - 3.3 重量级锁【指向互斥量(重量级锁)的指针 | 10】

- 4. 总结锁升级过程

- 5. 锁对比

 

 

1. 概要

应对复杂情况经典的思想是找到统计场景,分级别处理。计算机底层机制其实都不难,不要怕,本质上是正是因为底层,所以需要非常简单的实现,不像抽象层那么间接。就是规则,以及规则组合比较杂。

理解锁要理解锁分级的假设。

  • 偏向锁,一般不会碰到竞争,所以看看是不是自己在用,是的话就一直用
  • 轻量级锁,竞争不激烈,分时段竞争,自旋一下就能得到,没必要阻塞
  • 重量级锁,mutex,阻塞队列,默认自旋

 

2. 对象头

锁的信息记录在两个地方:

  • 对象头
  • 线程栈帧中

以下是对象头的结构,熟悉它的结构,有利于后面的理解,后面经常回来翻看即可。

对象头结构如下:

长度

内容

说明

32/64bit

Mark Word

存储对象的hashCode或锁信息等

32/64bit

Class Metadata Address

存储到对象类型数据的指针

32/64bit

Array length

数组的长度(如果是数组)

 

来自 <http://concurrent.redspider.group/article/02/9.html>

其中,锁信息是Mark Word,其结构是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值