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

資訊專欄INFORMATION COLUMN

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

sherlock221 / 2302人閱讀

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

奇怪的代碼
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, 而且還要聲明一個局部變量?

探尋緣由

經過搜索, 找到的解釋本質上是由于: JVM內存模型 和 OOP 之間的不同.

如果我們直接使用:

    Thread current = Thread.currentThread();

函數內使用current的執行時序:

函數僅會保存current的指針

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

然后再調用相應方法. 例如: current.sleep(1L);

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

JVM 的優化

現在JVM已經可以做到在編譯期, 針對此種類型的代碼調用, 將對象內聯到函數的操作數棧中了.
但在JDK中還是保留了大量的final局部變量的使用, 尤其是在并發包內.

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

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

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

相關文章

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

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

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

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

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

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

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

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

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

    摘要:語言通過字節碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。有針對不同系統的特定實現,,,目的是使用相同的字節碼,它們都會給出相同的結果。項目主要基于捐贈的源代碼。 本文來自于我的慕課網手記:Java編程中那些再熟悉不過的知識點,轉載請保留鏈接 ;) 1. 面向對象和面向過程的區別 面向過程 優點: 性能比面向對象高。因為類調用時需要實例...

    taowen 評論0 收藏0

發表評論

0條評論

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