第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在ArrayBlockingQueue中,為什么要將最終成員字段復(fù)制到局部變量中?

在ArrayBlockingQueue中,為什么要將最終成員字段復(fù)制到局部變量中?

慕妹3146593 2019-06-26 16:55:13
在ArrayBlockingQueue中,為什么要將最終成員字段復(fù)制到局部變量中?在……里面ArrayBlockingQueue,所有需要鎖的方法都將其復(fù)制到本地。final變量,然后調(diào)用lock().public boolean offer(E e) {     if (e == null) throw new NullPointerException();     final ReentrantLock lock = this.lock;     lock.lock();     try {         if (count == items.length)             return false;         else {             insert(e);             return true;         }     } finally {         lock.unlock();     }}有什么理由復(fù)制this.lock到局部變量lock當(dāng)田野this.lock是final?此外,它還使用E[]在采取行動之前:private E extract() {     final E[] items = this.items;     E x = items[takeIndex];     items[takeIndex] = null;     takeIndex = inc(takeIndex);     --count;     notFull.signal();     return x;}是否有任何理由將最終字段復(fù)制到局部變量中?
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經(jīng)驗 獲得超8個贊

這是一個極端優(yōu)化,DougLea,這個類的作者,喜歡使用。這里有個帖子最近的線索在核心的libs-dev郵件列表中,這個精確的主題很好地回答了你的問題。

從崗位:

.復(fù)制到本地會生成最小的字節(jié)碼,對于低級代碼來說,編寫離機器稍微近一點的代碼是很好的


查看完整回答
反對 回復(fù) 2019-06-26
?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

這條線給出一些答案。實質(zhì)內(nèi)容:

  • 編譯器很難證明最終字段在方法中不會改變(因為反射/序列化等)。
  • 大多數(shù)當(dāng)前編譯器實際上不嘗試,因此每次使用時都必須重新加載最終字段,這可能會導(dǎo)致緩存丟失或頁面錯誤。
  • 將其存儲在局部變量中會迫使jvm只執(zhí)行一個負(fù)載。


查看完整回答
反對 回復(fù) 2019-06-26
  • 2 回答
  • 0 關(guān)注
  • 499 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號