转:http://kenwublog.com/theory-of-java-biased-locking
阅读本文的读者,需要对Java轻量级锁有一定的了解,知道lock record, mark word之类的名词。可以参考我的一篇博文:Java轻量级锁原理详解(Lightweight Locking)
Java偏向锁(Biased Locking)是Java6引入的一项多线程优化。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能。
轻量级锁也是一种多线程优化,它与偏向锁的区别在于,轻量级锁是通过CAS来避免进入开销较大的互斥操作,而偏向锁是在无竞争场景下完全消除同步,连CAS也不执行(CAS本身仍旧是一种操作系统同步原语,始终要在JVM与OS之间来回,有一定的开销)。
所谓的无竞争场景,举个例子,就是单线程访问带同步的资源或方法。
偏向锁实现原理
偏向锁,顾名思义,它会偏向于第一个访问锁的线程,如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要触发同步。
如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会尝试消除它身上的偏向锁,将锁恢复到标准的轻量级锁。(偏向锁只能在单线程下起作用)
通过下图可以更直观的理解偏向锁:
这张图,省略了轻量级锁相关的几处步骤,将关注点更多地聚焦在偏向锁的状态变化上。
偏向模式和非偏向模式,在下面的mark word表中,主要体现在thread ID字段是否为空。
挂起持有偏向锁的线程,这步操作类似GC的pause,但不同之处是,它只挂起持有偏向锁的线程(非当前线程)。
在抢占模式的橙色区域说明中有提到,指向当前堆栈中最近的一个lock record(在轻量级锁原理一文有讲到,lock record是进入锁前会在stack上创建的一份内存空间)。
这里提到的最近的一个lock record,其实就是当前锁所在的stack frame上分配的lock record。
整个步骤是从偏向锁恢复到轻量级锁的过程。
偏向锁也会带来额外开销
在JDK6中,偏向锁是默认启用的。它提高了单线程访问同步资源的性能。
但试想一下,如果你的同步资源或代码一直都是多线程访问的,那么消除偏向锁这一步骤对你来说就是多余的。事实上,消除偏向锁的开销还是蛮大的。
所以在你非常熟悉自己的代码前提下,大可禁用偏向锁 -XX:-UseBiasedLocking 。
转载请注明原文链接:http://kenwublog.com/theory-of-java-biased-locking
相关推荐
Biased Locking in HotSpot
锁机制的论文,在jdk1.6以后引入的偏向锁技术大大增加了以往重锁sychronized的性能
Eliminating Synchronization-Related Atomic Operations with Biased Locking and Bulk Rebiasing 博文链接:https://xieyj.iteye.com/blog/322089
使用归档链接自动替换偏向新闻网站的所有链接 停止点击虚假/偏见新闻。 停止以广告收入奖励虚假/偏见的新闻网站。 此扩展名将所有与它们的链接替换为存档链接。 支持语言:English (United States)
一个小的 Python 模块,用于计算rank-biased overlay,衡量参差不齐的、可能无限的排名列表之间的相似性,这些列表可能包含也可能不包含相同的项目(直到实际评估的深度或根本不包含)。参见 W. Webber、A. Moffat ...
临床医药试验随机数的产生(Biased Coin Randomization)
invest-email-biased.csv
偏向工作队列相同的简单串行生产者/并行消费者基准测试的三种实现。TL; DR 在此基准测试中,使用通道作为工作队列(即 )会在Linux上引起很多不必要的上下文切换和任务迁移。 一个简单的“”实现将这些上下文切换和...
通过c语言实现matlab函数 xcorr的计算,比较全面 集成了unbiased biased cross 等运算函数
为了直接从H.264码流中检测镜头边界,提出了利用H.264压缩域多特征和Biased-SVM(不平衡支持向量机)分类算法的检测方法。分析帧类型、宏块类型、运动矢量、帧内预测模式等信息,以获得发生镜头突变和渐变的特征。...
Ranking-based biased learning swarm optimizer for large-scale optimization (RBLSO),基于秩排序的学习粒子群算法,求解大规模优化问题。
Traps and Pitfalls of Topic-Biased PageRankPaolo Boldi∗ Roberto Posenato† Massimo Santini Sebastiano Vigna Dipartimento di Scienze dell’Informazione, Università degli Studi di Milano, Italyand† ...
python库。 资源全名:coupled_biased_random_walks-1.0.0.tar.gz
Effective Computation of Biased Quantiles over Data StreamsGraham Cormode∗Rutgers University graham@dimacs.rutgers.eduS. Muthukrishnan†Rutgers University muthu@cs.rutgers.eduFlip Korn AT&T Labs–...
2020-5-A biased randomised algorithm for the capacitated facility location problem with soft constraints.pdf
资源来自pypi官网。 资源全名:biased_memory_toolbox-1.2.3-py3-none-any.whl
JEDEC JESD226:2013 RF BIASED LIFE (RFBL) TEST METHOD - 完整英文电子版(17页).zip
JEDEC JESD226:2013 RF BIASED LIFE (RFBL) TEST METHOD - 完整英文电子版(17页).pdf
在已有P2P模型的基础上,提出了一种基于时间序列最近偏向技术的网络信任模型(recent-biased trust model,RBTM)。该模型采用了时间序列可变分割法选取评价时间单元(evaluate time unit,ETU),同时引入了比较合理的时间...