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

資訊專欄INFORMATION COLUMN

AtomicLong.lazySet 是如何工作的?

CoderStudy / 2358人閱讀

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

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

Jackson Davis答道:

  

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

  

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

  

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

Felix Sulima補充道:

  

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


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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64018.html

相關文章

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

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

    lx1036 評論0 收藏0
  • JavaScript 如何工作:JavaScript 內存模型

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

    baoxl 評論0 收藏0
  • 追尋終極數據庫 - 事務/分析混合處理系統交付挑戰 (4)(完結篇)

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

    nanchen2251 評論0 收藏0

發表評論

0條評論

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