锁的优化
鎖粗化
虛擬機(jī)遇到一連串連續(xù)的對同一鎖不斷的進(jìn)行請求和釋放的操作,把所有的鎖操作整合成對鎖的一次請求
synchronized (lock){for(int i=0;i<20;i++){// do sth }}
鎖偏向
如果一個(gè)線程獲得鎖,那么就進(jìn)入偏向模式,下次再次請求鎖時(shí),無須進(jìn)行同步操作,節(jié)省了鎖申請的時(shí)間,對于鎖競爭比較激烈的場合不佳,這樣會(huì)導(dǎo)致偏向模式失效
JAVA虛擬機(jī)參數(shù) -XX:+UseBiasedLocking開啟
輕量級鎖
把對象頭部作為指針,指向持有鎖線程的內(nèi)部堆棧,來判斷線程是否持有對象鎖
子旋鎖
當(dāng)前線程暫時(shí)無法獲得鎖,本應(yīng)該掛起,但是虛擬機(jī)進(jìn)行一次賭博,CPU循環(huán)幾次(空循環(huán)),如果可以得到鎖,那么進(jìn)入臨界區(qū),如果不能,進(jìn)行掛起
鎖消除
Java虛擬機(jī)在JIT編譯時(shí),通過上下文的掃描,去除不可能存在共享資源競爭的鎖,比如使用了StringBuffer Vector
?
轉(zhuǎn)載于:https://www.cnblogs.com/bockpecehhe/p/9305884.html
總結(jié)
- 上一篇: 项目微管理29 - 转正
- 下一篇: [dp] Jzoj P5804 简单的序