成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

sherlock221 / 2307人閱讀

摘要:奇怪的代碼行這里第一行為什么加了而且還要聲明一個(gè)局部變量探尋緣由經(jīng)過搜索找到的解釋本質(zhì)上是由于內(nèi)存模型和之間的不同如果我們直接使用函數(shù)內(nèi)使用的執(zhí)行時(shí)序函數(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, 而且還要聲明一個(gè)局部變量?

探尋緣由

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

如果我們直接使用:

    Thread current = Thread.currentThread();

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

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

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

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

好像還可以接受嘛, 但如果在同一個(gè)函數(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://systransis.cn/yun/77575.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    taowen 評論0 收藏0

發(fā)表評論

0條評論

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