| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 提升--06---解析Synchronized锁升级 -> 正文阅读 |
|
[系统运维]提升--06---解析Synchronized锁升级 |
Synchronized锁升级
基础知识1. CAS算法
CAS算法涉及到三个操作数
2. 用户态与内核态cpu分不同的指令级别
JDK早期,synchronized 叫做重量级锁, 因为申请锁资源必须通过kernel, 系统调用
3. 对象结构在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:
下图是普通对象实例与数组对象实例的数据结构: 对象头HotSpot虚拟机的对象头包括两部分信息:
如果对象是一个数组, 那在对象头中还必须有一块数据用于记录数组长度. markword
64位虚拟机在不同状态下markword结构如下图所示:
查看对象结构工具:JOL = Java Object Layout
锁的介绍
1.偏向锁Java偏向锁(Biased Locking)是Java6引入的一项多线程优化。
偏向锁与轻量级锁理念上的区别:轻量级锁:
偏向锁:
意义:锁偏向于第一个获得它的线程。如果在接下来的执行过程中,该锁没有被其他的线程获取,则持有偏向锁的线程将永远不需要再进行同步。 2.轻量锁 自旋锁:3.重量锁
Synchronized 原理monitorenter 和 monitorexit :Synchronized 是 由 JVM 实 现 的 一 种 实 现 互 斥 同 步 的 一 种 方 式 , 如 果 你 查 看 被 Synchronized 修 饰 过 的 程 序 块 编 译 后 的 字 节 码 , 会 发 现 , 被 Synchronized 修 饰 过 的 程 序 块 , 在 编 译 前 后 被 编 译 器 生 成 了monitorenter 和 monitorexit 两 个 字 节 码 指 令。
两 个 指 令 是 什 么 意 思 呢 ?在 虚 拟 机 执 行 到 monitorenter 指 令 时 , 首 先 要 尝 试 获 取 对 象 的 锁 : 如 果 获 取 对 象 失 败 了 , 那 当 前 线 程 就 要 阻 塞 等 待 , 直 到 对 象 锁 被 另 外 一 个 线 程 释 放 为 止 。 Java 中 Synchronize 通 过 在 对 象 头 设 置 标 记 , 达 到 了 获 取 锁 和 释 放 锁 的 目 的 。
synchronized的横切面详解java源码层级:
字节码层级
JVM层级(Hotspot)
锁升级过程
锁机制的切换是根据竞争激烈程度进行的
锁升级的执行过程:
锁升级细节:
锁的其他常见问题?1.锁重入
2.自旋锁什么时候升级为重量级锁?1.6之前:
1.6之后:
自适应自旋 :自适应自旋锁意味着自旋的时间(次数)不再固定,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。
3. 为什么有自旋锁还需要重量级锁?自旋锁:
重量锁:
4. 偏向锁是否一定比自旋锁效率高?
5. 偏向锁启动:
匿名偏向锁线程休眠5秒,再启动,new出来的对象,默认就是一个可偏向匿名对象101
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 11:35:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |