国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

AtomicLong.lazySet 是如何工作的?

CoderStudy / 2364人閱讀

摘要:上有人提問是如何工作的答道為一個對象設(shè)置一個值,會確保其他線程讀取到最新值,原子類和變量也是一樣的,這是由依賴于硬件的系統(tǒng)指令如的實現(xiàn)的。深入查看你會發(fā)現(xiàn)其實他們是相同的,是一個的包裝。這里是里關(guān)于如何獲得裝配的一個描述。

Quora上有人提問AtomicLong.lazySet是如何工作的?

Jackson Davis答道:

  

為一個AtomicLong對象設(shè)置一個值,jvm會確保其他線程讀取到最新值,原子類和voliatile變量也是一樣的,這是由依賴于硬件的系統(tǒng)指令(如x86的xchg)實現(xiàn)的。lazySet卻是無法保證這一點的方法,所以其他線程在之后的一小段時間里還是可以讀到舊的值。這有什么好處呢?性能:在多核處理器下,內(nèi)存以及cpu緩存的讀和寫常常是順序執(zhí)行的,所以在多個cpu緩存之間同步一個內(nèi)存值的代價是很昂貴的。

  

如何實現(xiàn)呢?大多數(shù)的原子類,比如AtomicLong本質(zhì)上都是一個Unsafe和一個volatile Long變量的包裝類。值得注意的是AtomicLong.lazySet方法實際是調(diào)用了本地方法Unsafe.putOrderedLong,本地方法Unsafe.putOrderedLong的實現(xiàn)可以參考http://hg.openjdk.java.net/jdk7/…。從Unsafe的代碼中可以發(fā)現(xiàn)Unsafe_setOrderedLong是一個本地方法(c++實現(xiàn)),它僅調(diào)用了SET_FIELD_VOLATILE,這很是奇怪,我們期望共享的Unsafe_setLongVolatile擁有不同的語義。PS:在非增強版本中,setOrdered僅僅是調(diào)用了setVolatile方法,很是讓人失望。深入查看你會發(fā)現(xiàn)其實他們是相同的,SET_FIELD_VOLATILE是一個OrderAccess:release_store_fence的包裝。可以在Linux x86的代碼http://hg.openjdk.java.net/jdk7/…中找到此方法的實現(xiàn),在64bit x86系統(tǒng)中采用xchgq來代碼,64位版本指令的問題我上面有提到過,上火。

  

ps:從理論上講lazySet能比一個標(biāo)準(zhǔn)的volatile變量的寫性能更好。但是我在openJdk里沒有找到相關(guān)代碼。

Felix Sulima補充道:

  

sun.misc.unsafe很多方法被jvm增強了,JIT(just in time運行時編譯執(zhí)行的技術(shù))直接解釋而忽略原始的實現(xiàn)。可以在這里找到這個例子:src/share/vm/classfile/vmSymbols.hpp@3facbb14e873列表中的native方法僅僅是非JIT環(huán)境下的一個備份的內(nèi)部方法。例如,如果它沒有被調(diào)用(我也不知道是什么原因),因此這些方法缺乏一些必要的優(yōu)化。從Talk from JAX London的幻燈片11-12可以看到AtomicLong.lazySet(…)在x86系統(tǒng)上會被編譯成“mov”指令。這里是Google Group里關(guān)于如何獲得JIT裝配的一個描述。


原文 How-does-AtomicLong-lazySet-work
翻譯 孫文強

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64018.html

相關(guān)文章

  • JavaScript 如何工作系列文章已更新到22篇

    摘要:為了方便大家共同學(xué)習(xí),整理了之前博客系列的文章,目前已整理是如何工作這個系列,可以請猛戳博客查看。以下列出該系列目錄,歡迎點個星星,我將更友動力整理理優(yōu)質(zhì)的文章,一起學(xué)習(xí)。 為了方便大家共同學(xué)習(xí),整理了之前博客系列的文章,目前已整理 JavaScript 是如何工作這個系列,可以請猛戳GitHub博客查看。 以下列出該系列目錄,歡迎點個星星,我將更友動力整理理優(yōu)質(zhì)的文章,一起學(xué)習(xí)。 J...

    lx1036 評論0 收藏0
  • JavaScript 如何工作:JavaScript 內(nèi)存模型

    摘要:調(diào)用堆棧是存放原始數(shù)據(jù)類型的地方除了函數(shù)調(diào)用之外。上一節(jié)中聲明變量后調(diào)用堆棧的粗略表示如下。解釋改變的正確方法是更改內(nèi)存地址。在聲明時,將在調(diào)用堆棧上分配內(nèi)存地址,該值是在堆上分配的內(nèi)存地址。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 21 篇。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 如果你錯過了前面的章節(jié),可以在這里找到它們:...

    baoxl 評論0 收藏0
  • 追尋終極數(shù)據(jù)庫 - 事務(wù)/分析混合處理系統(tǒng)交付挑戰(zhàn) (4)(完結(jié)篇)

    摘要:評估選項本報告涵蓋了為了支持工作負(fù)載涵蓋運營和分析,查詢引擎面臨的挑戰(zhàn)的細(xì)節(jié),這些細(xì)節(jié)也可以作為訪問數(shù)據(jù)庫引擎查詢引擎和存儲引擎組合以及滿足事務(wù)運營分析或混合工作負(fù)載需求的指南。 評估HTAP選項 本報告涵蓋了為了支持工作負(fù)載(涵蓋OLTP、運營、BI和分析),查詢引擎面臨的挑戰(zhàn)的細(xì)節(jié),這些細(xì)節(jié)也可以作為訪問數(shù)據(jù)庫引擎、查詢引擎和存儲引擎組合以及滿足事務(wù)、運營、分析或混合工作負(fù)載需求的...

    nanchen2251 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<