转载

【深入浅出-JVM】(60):偏向锁

程序如果没有竞争,则取消之前已经取得锁的线程同步操作

例子

有锁对象,只有一个线程获取锁,则采用偏向锁模式可以大大提高性能。

package com.mousycoder.mycode.thinking_in_jvm;

import java.util.List;
import java.util.Vector;

/**
 * @version 1.0
 * @author: mousycoder
 * @date: 2019-08-02 13:54
 */
public class Biased {

    public static List<Integer> numberList = new Vector<Integer>();

    public static void main(String[] args) {
        long begin = System.currentTimeMillis();
        int count = 0;
        int startnum = 0;
        while (count < 10000000) {
            numberList.add(startnum);
            startnum+=2;
            count++;
        }

        long end = System.currentTimeMillis();
        System.out.println(end - begin );
    }
}

一般情况下需要 4626 毫秒,如果执行 -XX:+UseBiasedLocking -XX:BiasedLockingStartupDelay=0 -client -Xmx512m -Xms512m ,则只需要 501 毫秒,性能大大提升,其中 -XX:BiasedLockingStartupDelay=0 表示虚拟机在启动后,立刻启用偏向锁,默认是 4 秒后启动,-XX:+UseBiasedLocking代表启用偏向锁

结论

偏向锁适合锁竞争不激烈的情况下,就容易一直保持在偏向模式,激烈的竞争一般禁用偏向锁(-XX:-UseBiasedLocking)

原文  http://mousycoder.com/thinking-in-jvm/60/
正文到此结束
Loading...