Java——》JVM对原生的锁做了哪些优化

推荐链接:

总结------》【Java】

总结------》【Mysql】

总结------》【Redis】

总结------》【Kafka】

总结------》【Spring】

总结------》【SpringBoot】

总结------》【MyBatis、MyBatis-Plus】

总结------》【Linux】

总结------》【MongoDB】

总结------》【Elasticsearch】

Java------》JVM对原生的锁做了哪些优化

在Java6之前,Monitor的实现完全依赖底层操作系统的互斥锁来实现,由于Java层面的线程与操作系统的原生线程有映射关系,如果要将一个线程进行阻塞或唤起都需要操作系统的协助,这就需要从用户态切换到内核态来执行,这种切换代价十分昂贵,很消耗处理器时间,现代JDK中做了大量的优化。

优化1:使用自旋锁

在线程进行阻塞操作之前先让线程自旋等待一段时间,可能在等待期间其他线程已经解锁,这时就无需再让线程执行阻塞操作,避免了用户态到内核态的切换。

优化2:提供了3种不同的Monitor实现(3种不同的锁)

  1. 偏向锁
  2. 轻量级锁
  3. 重量级锁

当JVM检测到不同的竞争状况时,会自动切换到适合的锁实现,这就是锁的升级、降级(Java------》synchronized锁升级)。

相关推荐
HoroMin2 分钟前
在Spring Boot中自定义JSON返回日期格式的指南
java·开发语言·spring boot·注解
汪洪墩7 分钟前
使用Mars3d加载热力图的时候,出现阴影碎片
开发语言·前端·javascript·vue.js·cesium
木木黄木木8 分钟前
使用Three.js创建炫酷的3D玻璃质感动态效果
开发语言·javascript·3d
@小红花28 分钟前
Python从入门到精通
开发语言·python
androidwork35 分钟前
Kotlin实现文件上传进度监听:RequestBody封装详解
android·开发语言·kotlin
浮游本尊36 分钟前
Java学习第6天 - 多线程编程基础
java
tq108640 分钟前
值类:Kotlin中的零成本抽象
java·linux·前端
SimonKing1 小时前
集合的处理:JDK和Guava孰强孰弱?
java·后端·算法
爱装代码的小瓶子1 小时前
字符操作函数续上
android·c语言·开发语言·数据结构·算法
haokan_Jia1 小时前
【java中使用stream处理list数据提取其中的某个字段,并由List<String>转为List<Long>】
java·windows·list