偏向鎖淺析
阿新 • • 發佈:2019-01-28
mem 耗時 https 內置 pri tsp 鎖機制 ase bsp
偏向鎖不像自旋鎖、讀寫鎖或者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毫秒.
偏向鎖淺析