码迷,mamicode.com
首页 > 其他好文 > 详细

偏向锁浅析

时间:2019-01-28 20:15:51      阅读:599      评论:0      收藏:0      [点我收藏+]

标签:www.   delay   ref   span   默认   rtt   out   www   其他   

  偏向锁不像自旋锁、读写锁或者synchronize修饰词这样的同步,它其实是JVM内置的一种锁机制,自JDK1.6后默认启用。换句话说,这种锁不是咱程序员能用代码来瞎操心的,JVM自己会去操心的。真想要瞎操心,就得改JVM的启动参数。

  既然无需我们操心,那么了解一下也是好的。偏向锁偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他的线程获取,那么持有偏向锁的线程无需再进行同步。很明显,当锁的竞争情况很少出现时,偏向锁就能提高性能,因为它比轻量级锁(如自旋锁)少了一步:CAS。如果锁的竞争比较激烈,那么偏向锁并无太大用处。我们来看看,在自旋锁和synchronize同步方法两种情况下,偏向锁的实际时延,这里用的是jdk1.8版本。

  一、自旋锁:代码参见自旋锁浅析的testSpinLock方法

  1、默认耗时:

count值:100000, 耗时:25毫秒.

  2、开启偏向锁,启动默认五秒之后生效:-XX:+UseBiasedLocking

技术分享图片

count值:100000, 耗时:32毫秒.

  3、开启偏向锁,立即生效:-XX:+UseBiasedLocking -XX:BiasedLockingStartupDelay=0

技术分享图片

count值:100000, 耗时:120毫秒.

  二、synchronize同步方法:代码参见,需要增加全局变量:

private long startTime = 0L;

  在before方法开始处加入该变量的赋值:

startTime = System.currentTimeMillis();

  再加上after方法:

    @After
    public void after()
    {
        System.out.printf("耗时:%d毫秒.\n", System.currentTimeMillis() - startTime);
    }

  1、默认耗时:

耗时:1076毫秒.

  2、开启偏向锁,启动默认五秒之后生效:-XX:+UseBiasedLocking

技术分享图片

耗时:1090毫秒.

  3、开启偏向锁,立即生效:-XX:+UseBiasedLocking -XX:BiasedLockingStartupDelay=0

技术分享图片

耗时:1099毫秒.

 

偏向锁浅析

标签:www.   delay   ref   span   默认   rtt   out   www   其他   

原文地址:https://www.cnblogs.com/wuxun1997/p/10331505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!