jvm 偏向锁禁用以及移除

以下内容来自AI

关于 JVM 中 synchronized 的偏向锁,准确的答案是:偏向锁在 JDK 15 中被正式默认禁用和废弃,并在后续的 JDK 版本中计划移除其实现。

下面是详细的版本演进和时间线,这能帮助您更好地理解整个过程:

详细版本时间线

  1. JDK 6 引入

    • 偏向锁作为 HotSpot 虚拟机的一项重要优化被引入,旨在降低无竞争情况下同步操作的性能开销。
  2. JDK 15 (2020年9月) - 默认禁用和废弃

    • 这是最关键的一个版本。通过 JEP 374: Deprecate and Disable Biased Locking,Oracle 做出了以下决定:

      • 默认禁用 :在 JDK 15 及以后版本中,偏向锁默认是关闭 的。你不能再通过 -XX:+UseBiasedLocking 标志来开启它(设置会报警告)。

      • 正式废弃:该特性被标记为"废弃",意味着在未来版本中将会被移除。

    • 取消的原因

      • 维护成本高:偏向锁的代码在 HotSpot 的同步子系统中最复杂,维护和升级其他同步优化(如锁粗化、锁消除)变得非常困难。

      • 收益下降 :随着像 java.util.concurrent 这样的高性能无锁数据结构的普及,以及许多现代应用(如 Web 框架、响应式编程)中 synchronized 的使用减少,偏向锁带来的实际性能收益已经不如 JDK 6 时代那么明显。

      • 负优化风险:对于存在大量锁竞争的场景,偏向锁的撤销过程(需要进入安全点)反而会带来性能损耗。

  3. JDK 18 (2022年3月) - 移除

    • 通过 JEP 416: Reimplement Core Reflection with Method Handles ,在重构反射实现的同时,完全移除了偏向锁的实现代码

    • 从此,-XX:+UseBiasedLocking 选项被彻底移除,任何试图使用它的行为都会导致 JVM 启动失败。

总结

JDK 版本 状态
JDK 6 - 14 可用且默认开启(-XX:+UseBiasedLocking
JDK 15 - 17 默认禁用并标记为废弃-XX:+UseBiasedLocking 会报警告)
JDK 18+ 已完全移除,相关代码和选项不复存在

结论:

如果您的问题是"在哪个版本中取消",那么最核心的答案是 JDK 15 ,因为从这个版本开始它被默认禁用并宣布废弃。而最终的代码移除发生在 JDK 18

总结:

具体移除版本目前不清楚,google搜索是在 jdk 20中移除,但是实际版本不清楚,因为 openjdk 源码没看过。但是需要注意的是,使用新版本的jdk就不用考虑这个问题了。

https://blog.csdn.net/zlpzlpzyd/article/details/125559999

相关推荐
百锦再1 天前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven
2401_879693871 天前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
2301_793804691 天前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
独自破碎E1 天前
【面试真题拆解】你知道ThreadLocal是什么吗
java·jvm·面试
qq_417695051 天前
实战:用OpenCV和Python进行人脸识别
jvm·数据库·python
2301_793804691 天前
用Python和Twilio构建短信通知系统
jvm·数据库·python
庞轩px1 天前
HotSpot详解——符号引用、句柄池、直接指针的终极解密
java·jvm·设计模式·内存·虚拟机·引用·klass
暮冬-  Gentle°1 天前
Python内存管理机制:垃圾回收与引用计数
jvm·数据库·python
阿贵---1 天前
使用PyQt5创建现代化的桌面应用程序
jvm·数据库·python
wertyuytrewm1 天前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python