程序如果没有竞争,则取消之前已经取得锁的线程同步操作
有锁对象,只有一个线程获取锁,则采用偏向锁模式可以大大提高性能。
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)