synchronize锁优化
来源:互联网 发布:主人网络与访客网络 编辑:程序博客网 时间:2024/06/09 23:46
不管学什么东西,都要明白为什么
为什么需要锁优化?
因为java程序在挂起唤醒线程的时候需要从用户态切换到内核态,这是非常消耗资源的。
1,自旋锁与自适应自旋
在JDK 1.6中引入了自适应的自旋锁。自适应意味着自旋的时间不再固定了,而是由前
一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。如果在同一个锁对象上,自旋等
待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机就会认为这次自旋也很有
可能再次成功,进而它将允许自旋等待持续相对更长的时间,比如100个循环。另外,如果
对于某个锁,自旋很少成功获得过,那在以后要获取这个锁时将可能省略掉自旋过程,以避
免浪费处理器资源。有了自适应自旋,随着程序运行和性能监控信息的不断完善,虚拟机对
程序锁的状况预测就会越来越准确,虚拟机就会变得越来越“聪明”了。
2,锁消除
锁消除是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能
存在共享数据竞争的锁进行消除。锁消除的主要判定依据来源于逃逸分析的数据支持(第11
章已经讲解过逃逸分析技术),如果判断在一段代码中,堆上的所有数据都不会逃逸出去从
而被其他线程访问到,那就可以把它们当做栈上数据对待,认为它们是线程私有的,同步加
锁自然就无须进行。
3,锁粗化
把多个小锁改成一个大锁
4,轻量级锁
采用自旋来获取锁,比较占用cpu资源但是不会挂起
5,偏向锁
偏向某个线程,记录一个线程id,这个线程在获取这个锁的时候不需要获取或者释放锁
6,重量级锁
轻量级锁膨胀后成为重量级锁,在获取锁的时候直接挂起,不自旋
阅读全文
0 0
- synchronize锁优化
- synchronize程序锁
- java synchronize锁
- java--线程--锁-synchronize
- synchronize
- java多线程和synchronize锁
- synchronize类锁和对象锁详解
- synchronize类锁和对象锁详解
- synchronize的实现原理(偏向锁)
- java的锁,synchronize和lock
- synchronize和lock锁如何选择
- 在C++中实现同步锁,类似synchronize(object){....}
- 多线程运行同步锁synchronize的一些实战心得
- Chapter 2 验证synchronize同步函数时加的锁
- Lock锁机制和synchronize分别实现生产者消费者例程
- java的锁机制,synchronize与Lock比较
- synchronize函数
- java synchronize
- new与二维数组
- Windows Server 2012 R2安装IIS,ftp等组件,绑定服务器域名,域名解析到服务器,域名备案,以及安装期间错误的解决方案
- VMware虚拟机三种联网方式(图文详细解说)
- Spring定时器-注解
- java基础—JVM有哪些常用启动参数可以调整,描述几个?
- synchronize锁优化
- iOS UITableView性能优化 —— HERO博客
- 原型模式-Prototype Pattern
- 科学家开发出可源源不断产生胰腺干细胞的新技术
- deep-visualization-toolbox可视化安装
- RTP(Robi改造计划)--- Stretch可以跑Kinetic了
- Ajax回调函数中在创建一次请求提交
- Ubuntu下更新软件 updata,upgrade
- Mongo Manual 2.6学习笔记--前言