日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

10行代码理解Java锁消除

發(fā)布時(shí)間:2025/3/21 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10行代码理解Java锁消除 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

導(dǎo)語(yǔ):鎖消除是Java虛擬機(jī)在JIT編譯期間,通過(guò)對(duì)運(yùn)行上下文的掃描,去除不可能存在共享資源競(jìng)爭(zhēng)的鎖,通過(guò)鎖消除,可以節(jié)省毫無(wú)意義的請(qǐng)求鎖時(shí)間。本文作者舉例說(shuō)明了鎖消除,并分析了鎖消除的條件,本文適合對(duì)于深入了解JVM有興趣的開(kāi)發(fā)者。

問(wèn)題:

我聽(tīng)說(shuō)JVM會(huì)對(duì)鎖進(jìn)行優(yōu)化,所以如果我寫了synchronized,JVM會(huì)幫我做優(yōu)化!對(duì)嗎

理論:

在當(dāng)前Java內(nèi)存模型中,未觀察到的鎖不能保證具有任何效果。另外,這意味著在非共享對(duì)象上進(jìn)行同步是無(wú)效的,因此runtime可以啥也不做。同步有可能是不需要的,這為優(yōu)化提供了機(jī)會(huì)。

因此,如果逃逸分析發(fā)現(xiàn)對(duì)象是非逃逸的,編譯器就可以自行消除同步。

測(cè)試:

考慮如下JMH基準(zhǔn)測(cè)試:

如果我們運(yùn)行此測(cè)試并啟用-prof perfnorm profiler,將看到:

執(zhí)行結(jié)果完全相同。這意味著生成的代碼是相同的。生成的代碼是這樣:

鎖完全被消除了。如果我們使用jvm參數(shù)-xx:-eliminateLocks,或者使用-xx:-doescapeanalysis禁用EA(這會(huì)破壞依賴EA的每個(gè)優(yōu)化,包括鎖消除),則鎖計(jì)數(shù)器將膨脹:

顯示了兩種方式的開(kāi)銷對(duì)比。

結(jié)論:

鎖消除是由于逃逸分析帶來(lái)的優(yōu)化,它消除了多余的同步。當(dāng)內(nèi)部同步代碼沒(méi)有逃逸到外部時(shí),runtime就可以完全消除同步了。

原文地址:

https://shipilev.net/jvm/anatomy-quarks/10-string-intern/

本文作者Aleksey Shipilёv,由方圓翻譯。轉(zhuǎn)載本文請(qǐng)注明出處,歡迎更多小伙伴加入翻譯及投稿文章的行列,詳情請(qǐng)戳公眾號(hào)菜單「聯(lián)系我們」。

總結(jié)

以上是生活随笔為你收集整理的10行代码理解Java锁消除的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。