B2B网站_日本理论_B2B免费发布信息网站_日本看片网站_B2B企业贸易平台 -日本看片网站- 企资网

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企業資訊 » 行業 » 正文

Synchronized_中的_4_個優化,

放大字體  縮小字體 發布日期:2021-09-10 01:05:41    作者:企資小編    瀏覽次數:73
導讀

synchronized 在 JDK 1.5 時性能是比較低的,然而在后續的版本中經過各種優化迭代,它的性能也得到了前所未有的提升,之前說到過鎖膨脹對 synchronized 性能的提升,然而它也只是“眾多” synchronized 性能優化方案

synchronized 在 JDK 1.5 時性能是比較低的,然而在后續的版本中經過各種優化迭代,它的性能也得到了前所未有的提升,之前說到過鎖膨脹對 synchronized 性能的提升,然而它也只是“眾多” synchronized 性能優化方案中的一種,那么我們本文就來盤點一下 synchronized 的核心優化方案。

synchronized 核心優化方案主要包含以下 4 個:

  1. 鎖膨脹
  2. 鎖消除
  3. 鎖粗化
  4. 自適應自旋鎖

1.鎖膨脹

我們先來回顧一下鎖膨脹對 synchronized 性能的影響,所謂的鎖膨脹是指 synchronized 從無鎖升級到偏向鎖,再到輕量級鎖,最后到重量級鎖的過程,它叫做鎖膨脹也叫做鎖升級。

JDK 1.6 之前,synchronized 是重量級鎖,也就是說 synchronized 在釋放和獲取鎖時都會從用戶態轉換成內核態,而轉換的效率是比較低的。但有了鎖膨脹機制之后,synchronized 的狀態就多了無鎖、偏向鎖以及輕量級鎖了,這時候在進行并發操作時,大部分的場景都不需要用戶態到內核態的轉換了,這樣就大幅的提升了 synchronized 的性能。

2.鎖消除

很多人都了解 synchronized 中鎖膨脹的機制,但對接下來的 3 項優化卻知之甚少,這樣會在面試中錯失良機,那么我們本文就把這 3 項優化單獨拎出來講一下吧。

鎖消除指的是在某些情況下,JVM 虛擬機如果檢測不到某段代碼被共享和競爭的可能性,就會將這段代碼所屬的同步鎖消除掉,從而到底提高程序性能的目的。

鎖消除的依據是逃逸分析的數據支持,如 StringBuffer 的 append() 方法,或 Vector 的 add() 方法,在很多情況下是可以進行鎖消除的,比如以下這段代碼:

public String method() {    StringBuffer sb = new StringBuffer();    for (int i = 0; i < 10; i++) {        sb.append("i:" + i);    }    return sb.toString();}

以上代碼經過編譯之后的字節碼如下:

從上述結果可以看出,之前我們寫的線程安全的加鎖的 StringBuffer 對象,在生成字節碼之后就被替換成了不加鎖不安全的 StringBuilder 對象了,原因是 StringBuffer 的變量屬于一個局部變量,并且不會從該方法中逃逸出去,所以此時我們就可以使用鎖消除(不加鎖)來加速程序的運行。

3.鎖粗化

鎖粗化是指,將多個連續的加鎖、解鎖操作連接在一起,擴展成一個范圍更大的鎖。

我只聽說鎖“細化”可以提高程序的執行效率,也就是將鎖的范圍盡可能縮小,這樣在鎖競爭時,等待獲取鎖的線程才能更早的獲取鎖,從而提高程序的運行效率,但鎖粗化是如何提高性能的呢?

沒錯,鎖細化的觀點在大多數情況下都是成立了,但是一系列連續加鎖和解鎖的操作,也會導致不必要的性能開銷,從而影響程序的執行效率,比如這段代碼:

public String method() {    StringBuilder sb = new StringBuilder();    for (int i = 0; i < 10; i++) {        // 偽代碼:加鎖操作        sb.append("i:" + i);        // 偽代碼:解鎖操作    }    return sb.toString();}

這里我們不考慮編譯器優化的情況,如果在 for 循環中定義鎖,那么鎖的范圍很小,但每次 for 循環都需要進行加鎖和釋放鎖的操作,性能是很低的;但如果我們直接在 for 循環的外層加一把鎖,那么對于同一個對象操作這段代碼的性能就會提高很多,如下偽代碼所示:

public String method() {    StringBuilder sb = new StringBuilder();    // 偽代碼:加鎖操作    for (int i = 0; i < 10; i++) {        sb.append("i:" + i);    }    // 偽代碼:解鎖操作    return sb.toString();}

鎖粗化的作用:如果檢測到同一個對象執行了連續的加鎖和解鎖的操作,則會將這一系列操作合并成一個更大的鎖,從而提升程序的執行效率。

4.自適應自旋鎖

自旋鎖是指通過自身循環,嘗試獲取鎖的一種方式,偽代碼實現如下:

// 嘗試獲取鎖while(!isLock()){    }

自旋鎖優點在于它避免一些線程的掛起和恢復操作,因為掛起線程和恢復線程都需要從用戶態轉入內核態,這個過程是比較慢的,所以通過自旋的方式可以一定程度上避免線程掛起和恢復所造成的性能開銷。

但是,如果長時間自旋還獲取不到鎖,那么也會造成一定的資源浪費,所以我們通常會給自旋設置一個固定的值來避免一直自旋的性能開銷。然而對于 synchronized 關鍵字來說,它的自旋鎖更加的“智能”,synchronized 中的自旋鎖是自適應自旋鎖,這就好比之前一直開的手動擋的三輪車,而經過了 JDK 1.6 的優化之后,我們的這部“車”,一下子變成自動擋的蘭博基尼了。

自適應自旋鎖是指,線程自旋的次數不再是固定的值,而是一個動態改變的值,這個值會根據前一次自旋獲取鎖的狀態來決定此次自旋的次數。比如上一次通過自旋成功獲取到了鎖,那么這次通過自旋也有可能會獲取到鎖,所以這次自旋的次數就會增多一些,而如果上一次通過自旋沒有成功獲取到鎖,那么這次自旋可能也獲取不到鎖,所以為了避免資源的浪費,就會少循環或者不循環,以提高程序的執行效率。簡單來說,如果線程自旋成功了,則下次自旋的次數會增多,如果失敗,下次自旋的次數會減少。

總結

本文我們介紹了 4 種優化 synchronized 的方案,其中鎖膨脹和自適應自旋鎖是 synchronized 關鍵字自身的優化實現,而鎖消除和鎖粗化是 JVM 虛擬機對 synchronized 提供的優化方案,這些優化方案最終使得 synchronized 的性能得到了大幅的提升,也讓它在并發編程中占據了一席之地。


作者:Java中文社群
原文鏈接:juejin/post/6994443415911923719

 
(文/企資小編)
免責聲明
本文僅代表作發布者:企資小編個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

粵ICP備16078936號

微信

關注
微信

微信二維碼

WAP二維碼

客服

聯系
客服

聯系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號: weishitui

客服001 客服002 客服003

工作時間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

主站蜘蛛池模板: 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 | 森旺-A级防火板_石英纤维板_不燃抗菌板装饰板_医疗板 | 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 地埋式垃圾站厂家【佳星环保】小区压缩垃圾中转站转运站 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 菏泽知彼网络科技有限公司 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 天空彩票天下彩,天空彩天空彩票免费资料,天空彩票与你同行开奖,天下彩正版资料大全 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 首页 - 军军小站|张军博客 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 机械立体车库租赁_立体停车设备出租_智能停车场厂家_春华起重 | 云南成考网_云南成人高考报名网| 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 喷砂机厂家_自动除锈抛丸机价格-成都泰盛吉自动化喷砂设备 | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 锻造液压机,粉末冶金,拉伸,坩埚成型液压机定制生产厂家-山东威力重工官方网站 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 真空冷冻干燥机_国产冻干机_冷冻干燥机_北京四环冻干 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 |