鎖優化主要分為兩個層面:**層、jvm層。
**層:減少鎖持有時間(鎖粗化)、減小鎖粒度(concurrenthashmap)、鎖分離(readwritelock讀寫分離)。
jvm層:鎖消除(vector等安全容器,執行時不會出現資源競爭,將鎖消除)、偏向鎖、輕量級鎖、自旋鎖、重量級鎖。
偏向鎖、輕量級鎖並不是取代重量級鎖,而是使用cas原語減少執行緒進入互斥的概率。
偏向鎖:是為了避免某執行緒訪問共享資源重複的加鎖/釋放鎖,浪費資源。針對物件的mark word,如果物件是可偏向的
預設mark word的threadid是0。當第乙個執行緒訪問該物件的時候,通過cas操作,將threadid設定為這個執行緒的編號。
該執行緒執行同步塊,執行完不釋放偏向鎖。當該執行緒下次再呼叫該物件的時候,不用加鎖和解鎖。當有其他執行緒來競爭鎖的
時候,如果當前執行緒活動,公升級為輕量級鎖。另外的執行緒自旋。如果自旋結束之前,上乙個執行緒已經釋放輕量級鎖,該執行緒
獲取輕量級鎖。如果自旋結束之前,上乙個執行緒還沒有執行結束,此時,有兩個或兩個以上的執行緒競爭鎖,這個時候輕量級鎖
公升級為重量級鎖,自旋轉結束的鎖,進入阻塞狀態。等待獲得重量級鎖的執行緒執行完成,釋放鎖。
鎖的狀態:無鎖狀態、偏向鎖狀態、輕量級鎖狀態、重量級鎖狀態。
狀態轉換:如果jvm設定偏向鎖狀態,則預設物件處於偏向鎖狀態。當有兩個或兩個以上的執行緒競爭鎖,如果獲得偏向鎖的執行緒
還在活動,轉換成輕量級鎖。如果不在活動,撤銷偏向,轉化成無鎖狀態。輕量級鎖要麼轉化成重量級鎖,然後解鎖,進入無鎖
狀態,要麼直接進入無鎖狀態。當有其他的執行緒,獲取鎖的時候,就不在競爭偏向鎖,而是競爭輕量級鎖。
偏向鎖和輕量級鎖並不是為了替代重量級鎖,當有競爭的時候,仍舊依靠重量級鎖來解決。它們的存在只是為了在沒有競爭的
情況下,減少進入互斥的概率。重量級鎖的實現需要依靠作業系統的互斥,比較浪費資源。而偏向鎖和輕量級鎖,利用了cas
原語,通過設定標誌來實現。消耗的資源相比較重量級鎖可以忽略不計。
使用偏向和輕量級鎖並不是萬能的,當競爭比較激烈的時候,反而會降低效能。
Linux《系統優化》學習總結
1 yum優化 修改基礎yum源 curl o etc yum.repos.d centos base.repo 修改擴充套件yum源 wget o etc yum.repos.d epel.repo 2 關閉selinux 永久關閉 sed i s selinux enforcing selinu...
ceph效能優化學習總結
ceph效能優化學習總結很高興最近機緣巧合與ceph結緣,今天總結一下。ceph是一種高可用 高效能 可動態擴充套件的分布式檔案儲存系統。主要有物件儲存 檔案儲存以及塊儲存三種模式。其中檔案儲存是要元資料節點外,其他兩種並不需要單獨儲存大量的元資料,從而可以節省很多資源。關於ceph優化我所涉及的還...
《凸優化》學習筆記(一)
凸優化在數學優化中有著重要且特殊的身份。數學優化是乙個廣泛的話題,理解凸優化之前,請先理解線性優化。在機器學習演算法中,已知的比如logisticregression,svm,都與數學優化有關,在數學中,不存在無約束優化問題。比較常見的構建損失函式方法,從最簡單的兩個向量的二階範數的平方 knn,k...