91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中ThreadLocal內存泄漏的解決方法

發布時間:2021-05-06 12:32:45 來源:億速云 閱讀:291 作者:小新 欄目:編程語言

小編給大家分享一下java中ThreadLocal內存泄漏的解決方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

java基本數據類型有哪些

Java的基本數據類型分為:1、整數類型,用來表示整數的數據類型。2、浮點類型,用來表示小數的數據類型。3、字符類型,字符類型的關鍵字是“char”。4、布爾類型,是表示邏輯值的基本數據類型。

在線程中有一種方法,頻繁被大家所調用,那就是 ThreadLocal。不過在內存的處理上,ThreadLocal也會遇到比較棘手的問題,總是會產生一些內存的泄漏。

ThreadLocalMap的靜態內部類Entry:

    static class Entry extends WeakReference<ThreadLocal<?>> {
        /** The value associated with this ThreadLocal. */
        Object value;
 
        Entry(ThreadLocal<?> k, Object v) {
            super(k);
            value = v;
        }
    }

ThreadLocalMap使用靜態內部類Entry實現<k,v>存儲,而Entry繼承WeakReference類,所以ThreadLocalMap中的key其實是ThreadLocal的一個弱引用。

 正因為ThreadLocalMap以ThreadLocal的弱引用作為key,在這個ThreadLocal沒有外部強引用的時候,會被GC。這時候,ThreadLocalMap會出現一個key為null的Entry,理所當然的,這個Entry的value將永遠沒辦法被訪問到。

在這種情況下,如果當前工作線程一直沒有結束,那這個key為null的value因為被Entry強引用,而Entry被當前線程的ThreadLocalMap強引用,導致這個value永遠無法被GC,造成內存泄漏。

2、解決辦法

ThreadLocalMap的cleanSomeSlots(),expungeStaleEntry()方法都能清除key為null的value。 在ThreadLocal的set(),get(),remove()方法中,都會調用cleanSomeSlots()或expungeStaleEntry()來清除ThreadLocalMap中所有key為null的value。

以上是“java中ThreadLocal內存泄漏的解決方法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金湖县| 山东省| 凤凰县| 余庆县| 通河县| 大冶市| 瑞丽市| 措勤县| 洱源县| 林周县| 洛宁县| 繁昌县| 壶关县| 乌恰县| 利津县| 吴桥县| 来安县| 临夏县| 松桃| 集贤县| 连城县| 资中县| 金川县| 大港区| 澳门| 博兴县| 淮阳县| 新密市| 江都市| 桃园县| 丹江口市| 肥城市| 民和| 淳安县| 寻甸| 公安县| 鸡泽县| 福贡县| 临西县| 内乡县| 醴陵市|