Java自旋锁与JVM锁优化机制如何深度解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2898个文字,预计阅读时间需要12分钟。
目录+背景+好处+AtomicLong的实现+getAndIncrement方法+实验+缺点+适用场景+JVM对锁做了哪些优化?+自旋锁+锁消除+锁粗化+偏向锁/轻量级锁/重量级锁+锁升级+背景+先上图+由此可见,...
目录
- 背景
- 好处
- AtomicLong的实现
- getAndIncrement方法
- 实验
- 缺点
- 适用场景
- JVM对锁做了哪些优化?
- 自适应的自旋锁
- 锁消除
- 锁粗化
- 偏向锁/ 轻量级锁/ 重量级锁
- 锁升级
背景
先上图
由此可见,非自旋锁如果拿不到锁会把线程阻塞,直到被唤醒;
自旋锁拿不到锁会一直尝试
为什么要这样?
好处
阻塞和唤醒线程都是需要高昂的开销的,如果同步代码块中的内容不复杂,那么可能转换线程带来的开销比实际业务代码执行的开销还要大。
本文共计2898个文字,预计阅读时间需要12分钟。
目录+背景+好处+AtomicLong的实现+getAndIncrement方法+实验+缺点+适用场景+JVM对锁做了哪些优化?+自旋锁+锁消除+锁粗化+偏向锁/轻量级锁/重量级锁+锁升级+背景+先上图+由此可见,...
目录
- 背景
- 好处
- AtomicLong的实现
- getAndIncrement方法
- 实验
- 缺点
- 适用场景
- JVM对锁做了哪些优化?
- 自适应的自旋锁
- 锁消除
- 锁粗化
- 偏向锁/ 轻量级锁/ 重量级锁
- 锁升级
背景
先上图
由此可见,非自旋锁如果拿不到锁会把线程阻塞,直到被唤醒;
自旋锁拿不到锁会一直尝试
为什么要这样?
好处
阻塞和唤醒线程都是需要高昂的开销的,如果同步代码块中的内容不复杂,那么可能转换线程带来的开销比实际业务代码执行的开销还要大。

