由於jvm啟動的時候,前4秒帶synchronized的方法,上的是輕量級鎖。原因是應為在jvm啟動時,本身就執行了很多帶synchronized關鍵字的方法,但是這些大多都是輕量級鎖。如果直接設定成偏向鎖,在鎖公升級的過程中,偏向鎖清除鎖的過程比較複雜,導致在公升級鎖過程中消耗太多的資源和時間。所以延遲偏向鎖。
public
class
a}
public
class
example
long end = system.
currenttimemillis()
; system.out.
println
(string.
format
("%sms"
, end - start));
}}
輕量級鎖執行時間
設定jvm的對應的引數
-xx:biasedlockingstartupdelay=0
設定延遲鎖引數為0
偏向鎖的執行時間
在次執行同樣的方法,時間很明顯的節省了很多。
讓兩個執行緒去競爭,膨脹成重量鎖
public
class
jolexample6}}
.start()
;}countdownlatch.
await()
;long end = system.
currenttimemillis()
; system.out.
println
(string.
format
("%sms"
, end - start));
}}
重量級鎖的執行時間
通過簡單的實驗,得到效能 排序,偏向鎖,輕量級鎖,重量級鎖
偏向鎖 輕量級鎖 重量級鎖
首先簡單說下先偏向鎖 輕量級鎖 重量級鎖三者各自的應用場景 偏向鎖 只有乙個執行緒進入臨界區 輕量級鎖 多個執行緒交替進入臨界區 重量級鎖 多個執行緒同時進入臨界區。還要明確的是,偏向鎖 輕量級鎖都是jvm引入的鎖優化手段,目的是降低執行緒同步的開銷。比如以下的同步 塊 synchronized l...
偏向鎖 輕量級鎖 重量級鎖
synchronized關鍵字就像是汽車的自動檔,現在詳細講這個過程。一腳油門踩下去,synchronized會從無鎖公升級為偏向鎖,再公升級為輕量級鎖,最後公升級為重量級鎖,就像自動換擋一樣。那麼自旋鎖在 呢?這裡的輕量級鎖就是一種自旋鎖。初次執行到synchronized 塊的時候,鎖物件變成偏...
輕量級鎖,偏向鎖,重量級鎖
物件頭資訊 使用monitor物件來實現重量級鎖,如果使用重量級鎖,加鎖過程就需要先去關聯monitor物件,然後還需要各種判斷。asychronized關鍵字實現重量級鎖的原理 monitorenter和monitorexit就是操作monitor物件,會有效能損耗,所以引入輕量級鎖。當出現重量級...