Synchronized总结

一、锁升级过程

java 复制代码
1、检测所对象的MarkWord里面,锁标志位01,无偏向。这是JVM给的初始值。
2、使用CAS将当前线程的ID替换MardWord的【锁线程ID】,如果成功则表示当前线程获得偏向锁,置偏向标志位01,
3、如果失败,则说明发生竞争,撤销偏向锁,进而升级为【轻量级锁】

4、多次尝试,通过当前线程使用CAS将对象头的MarkWord替换为锁记录指针,如果成功,当前线程获得锁,则依然处于轻量级状态。

5、如果自旋失败,并且超过自选次数5次,则升级为【重量级锁】。

二、Synchronized既是乐观也是悲观

java 复制代码
偏向锁、轻量锁、自旋锁都属于乐观锁。
重量级锁-Synchronized属于悲观锁

自旋锁尽可能的减少线程的阻塞,这对于锁的竞争不激烈,
且占用锁时间非常短的代码块来说性能能大幅度的提升,
因为自旋的消耗会小于线程阻塞挂起再唤醒的操作的消耗,
JVM有个很重要的参数就是自旋次数。

锁的内存模型

HotSpot是java的虚拟机,对象在内存中的存储分为三块区域:

1、对象头

2、实例数据

3、对齐填充

其中对象头又分为三块:markword、Klass Pointer、ArrayLength(假如对象为数组)

1、markword中包含了和Java对象息息相关的一些信息,它的实际大小一般和CPU字长保持一致,如在32位CPU上markword的大小一般为32位,即4字节。而在64位CPU上markword的大小一般为64位,即8字节

2、Klass Pointer Class 对象的类型指针,它指向对象对应的Class对象的内存地址。大小占4字节

在面试中,关于Markword的问题是非常常见的。以下是一些可能问到的问题:

1、什么是Markword?它在内存分配和垃圾回收中的作用是什么?

对象在内存的结构主要是3大块,对象头,实例数据,对其填充,对象头主要包含两大块,markwork和kclass point

2、Markword的存储结构是什么?

HashCode+分代年龄+锁标识

3、Markword的大小通常是多少?

4、Markword的锁标志位有什么作用?

偏向锁01 轻量级00 重量锁10

marwork这个文档写的很细介绍marwork

关于MarkWord面试相关MarkWord面试

相关推荐
佛祖让我来巡山18 天前
深入理解Java内存模型:从诡异Bug到优雅解决
线程安全·synchronized·volatile·final·jmm
weixin_4454766821 天前
Java并发编程——synchronized的实现原理与应用
java·开发语言·并发·synchronized
岁岁岁平安1 个月前
Java的双重检查锁机制(DCL)与懒加载的单例模式
java·单例模式·synchronized·
佛祖让我来巡山1 个月前
Java并发机制的底层实现原理:从CPU到JVM的全面解析
cpu·synchronized·volatile·锁升级·并发编程原理
huohaiyu1 个月前
synchronized (Java)
java·开发语言·安全·synchronized
牛马baby5 个月前
synchronized 做了哪些优化?
java·高并发·并发编程·synchronized·锁升级·面试资料·程序员涨薪跳槽
小徐Chao努力7 个月前
【解析】ReentrantLock锁、Syschronized锁面试点解析
java·面试·职场和发展·synchronized·
郑州吴彦祖7728 个月前
《深入解析Java synchronized死锁:从可重入锁到哲学家就餐问题》
java·线程·synchronized
娅娅梨9 个月前
synchronized实现原理
java·jvm·java多线程·synchronized