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

資訊專欄INFORMATION COLUMN

編程冷知識 --- 多余的局部變量final

sherlock221 / 2305人閱讀

摘要:奇怪的代碼行這里第一行為什么加了而且還要聲明一個局部變量探尋緣由經(jīng)過搜索找到的解釋本質(zhì)上是由于內(nèi)存模型和之間的不同如果我們直接使用函數(shù)內(nèi)使用的執(zhí)行時序函數(shù)僅會保存的指針會在使用的地方通過指針獲取對象然后再調(diào)用相應(yīng)方法例如好像還可以接受嘛但

奇怪的代碼
JDK 1.8 | java.util.concurrent.locks.ReentrantLock | 125行

/**
 * Performs non-fair tryLock.  tryAcquire is implemented in
 * subclasses, but both need nonfair try for trylock method.
 */
final boolean nonfairTryAcquire(int acquires) {
    final Thread current = Thread.currentThread();
    int c = getState();
    if (c == 0) {
        if (compareAndSetState(0, acquires)) {
            setExclusiveOwnerThread(current);
            return true;
        }
    }
    else if (current == getExclusiveOwnerThread()) {
        int nextc = c + acquires;
        if (nextc < 0) // overflow
            throw new Error("Maximum lock count exceeded");
        setState(nextc);
        return true;
    }
    return false;
}

這里第一行 :

final Thread current = Thread.currentThread();

為什么加了final, 而且還要聲明一個局部變量?

探尋緣由

經(jīng)過搜索, 找到的解釋本質(zhì)上是由于: JVM內(nèi)存模型 和 OOP 之間的不同.

如果我們直接使用:

    Thread current = Thread.currentThread();

函數(shù)內(nèi)使用current的執(zhí)行時序:

函數(shù)僅會保存current的指針

JVM會在使用current的地方, 通過指針獲取Thread對象.

然后再調(diào)用相應(yīng)方法. 例如: current.sleep(1L);

好像還可以接受嘛, 但如果在同一個函數(shù)內(nèi)多次調(diào)用呢?
程序會重復(fù) 2-3 步驟, 增加代碼的性能開銷.

JVM 的優(yōu)化

現(xiàn)在JVM已經(jīng)可以做到在編譯期, 針對此種類型的代碼調(diào)用, 將對象內(nèi)聯(lián)到函數(shù)的操作數(shù)棧中了.
但在JDK中還是保留了大量的final局部變量的使用, 尤其是在并發(fā)包內(nèi).

我想, 這就是老一輩工程師, 對代碼的執(zhí)著, 對性能的追求, 對自己的約束.

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

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

相關(guān)文章

  • 前端一些坑,一些記錄,一些知識

    摘要:當(dāng)頁面中元素樣式的改變并不影響它在文檔流中的位置時例如等,瀏覽器會將新樣式賦予給元素并重新繪制它,這個過程稱為重繪。 無限期更新前端的一些坑,一些記錄,一些冷知識https://github.com/ssshooter/... 大概從 17 年的六月份開始記錄吧,也已經(jīng)一年了,其中也包含了一些很簡單的知識,以前還覺得挺難的,現(xiàn)在看起來有點謎之感慨... JavaScript 所有對象...

    Keagan 評論0 收藏0
  • 探究final在java中作用

    摘要:關(guān)鍵字的字面意思是最終的不可修改的這似乎是一個看見名字就大概能知道怎么用的語法但你是否有深究過在各個場景中的具體使用方法注意事項以及背后涉及的設(shè)計思想呢一修飾變量基礎(chǔ)修飾基本數(shù)據(jù)類型變量和引用數(shù)據(jù)類型變量相信大家都具備基本的常識被修飾的變量 final關(guān)鍵字的字面意思是最終的, 不可修改的. 這似乎是一個看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個場景中的具體使用方法...

    Baaaan 評論0 收藏0
  • 探究final在java中作用

    摘要:關(guān)鍵字的字面意思是最終的不可修改的這似乎是一個看見名字就大概能知道怎么用的語法但你是否有深究過在各個場景中的具體使用方法注意事項以及背后涉及的設(shè)計思想呢一修飾變量基礎(chǔ)修飾基本數(shù)據(jù)類型變量和引用數(shù)據(jù)類型變量相信大家都具備基本的常識被修飾的變量 final關(guān)鍵字的字面意思是最終的, 不可修改的. 這似乎是一個看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個場景中的具體使用方法...

    番茄西紅柿 評論0 收藏0
  • 探究final在java中作用

    摘要:關(guān)鍵字的字面意思是最終的不可修改的這似乎是一個看見名字就大概能知道怎么用的語法但你是否有深究過在各個場景中的具體使用方法注意事項以及背后涉及的設(shè)計思想呢一修飾變量基礎(chǔ)修飾基本數(shù)據(jù)類型變量和引用數(shù)據(jù)類型變量相信大家都具備基本的常識被修飾的變量 final關(guān)鍵字的字面意思是最終的, 不可修改的. 這似乎是一個看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個場景中的具體使用方法...

    番茄西紅柿 評論0 收藏0
  • Java編程中那些再熟悉不過知識點(持續(xù)更新)

    摘要:語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時又保留了解釋型語言可移植的特點。有針對不同系統(tǒng)的特定實現(xiàn),,,目的是使用相同的字節(jié)碼,它們都會給出相同的結(jié)果。項目主要基于捐贈的源代碼。 本文來自于我的慕課網(wǎng)手記:Java編程中那些再熟悉不過的知識點,轉(zhuǎn)載請保留鏈接 ;) 1. 面向?qū)ο蠛兔嫦蜻^程的區(qū)別 面向過程 優(yōu)點: 性能比面向?qū)ο蟾摺R驗轭愓{(diào)用時需要實例...

    taowen 評論0 收藏0

發(fā)表評論

0條評論

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