高并发是从1.5到1.6的一个重要的改进,HotSpot虚拟机开发团队在这个版本上话费了大量的精力去实现各种锁优化:
1.自旋锁与自适应锁:许多应用上共享数据的锁定状态只会持续很短的时间,为了这段时间去挂起和恢复线程并不值当得。为了让线程等待,我们只需要让线程执行一个忙循环(自旋),这项技术就是所谓的自旋锁了。这个是JDK1.4.2引入的默认是关闭的,JDK1.6默认开启。
JDK 1.6引入了自适应的自旋锁,自适应意味着自旋的时间不再固定了,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。
2.锁消除是指虚拟机即时编译器在运行的时,对一些代码上要求同步,但是被检测都不可能存在共享数据竞争的锁进行消除。
3.锁粗化-但是如果一系列的连续操作都对同一个对象反复加锁和解锁,甚至加锁擦欧哦出现在循环体中的,那即使没有线程竞争,频繁地进行互斥同步操作也会导致不必要的性能损耗。如果虚拟机探测到有这样的操作对同一个对象加锁,将会把加锁同步的范围扩展(粗化)到整个操作序列的外部。
4.轻量级锁-是JDK 1.6加入的新型锁,是相对于使用操作系统互斥量来实现的传统锁而言的。是在无竞争的情况下使用CAS操作去消除使用的互斥量。
5.偏向锁-是JDK 1.6加入的新型锁,是在无竞争的情况下把整个同步都消除,连CAS操作都不做了。
锁优化
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 本文基于周志明的《深入理解java虚拟机 JVM高级特性与最佳实践》所写。特此推荐。 线程安全 简单定义:如果一个...
- 第十二章 Java内存模型与线程 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的...