在JEP 143(http://openjdk.java.net/jeps/143 在Java 9发布)中对竞争锁做了优化,简要内容如下:
JEP 143: Improve Contended Locking
Summary: Improve the performance of contended Java object monitors.
做一个简单的对比测试,代码如下,分别基于Java 8.0_152和Java 9.0.4
按照官方说明,关闭偏向锁和轻量锁 -XX:-UseBiasedLocking -XX:+UseHeavyMonitors
public class SyncTest implements Runnable {
public static void main(String[] args) throws InterruptedException {
int threadNum = 4;
SyncTest syncTest = new SyncTest();
Thread[] threadGroup = new Thread[threadNum];
for (int i = 0; i < threadNum; i++) {
threadGroup[i] = new Thread(syncTest);
}
long begin = System.currentTimeMillis();
for (int i = 0; i < threadNum; i++) {
threadGroup[i].start();
}
for (int i = 0; i < threadNum; i++) {
threadGroup[i].join();
}
long end = System.currentTimeMillis();
System.out.println(end - begin);
}
public void run() {
for (int i = 0; i < 100000000; i++) {
synchronized (this) {
}
}
}
}
最终经过多次对比:
在Java8下,平均执行时间大约为5.8s
在Java9下,平均执行时间大约为4.4s