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

溫馨提示×

溫馨提示×

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

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

java ThreadLocal內存泄漏如何解決

發布時間:2022-06-01 15:23:56 來源:億速云 閱讀:213 作者:iii 欄目:大數據

今天小編給大家分享一下java ThreadLocal內存泄漏如何解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1、泄漏實例

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

祁东县| 扎兰屯市| 大化| 水城县| 南康市| 丹巴县| 罗甸县| 天水市| 靖江市| 泰州市| 宜黄县| 五台县| 青铜峡市| 巴塘县| 六安市| 潜山县| 藁城市| 炉霍县| 德化县| 库车县| 五华县| 榆中县| 莱州市| 象州县| 弥渡县| 西乡县| 玉环县| 施甸县| 通海县| 安阳市| 锦屏县| 揭阳市| 神农架林区| 巴彦县| 宝山区| 同江市| 阿拉善盟| 彩票| 盐津县| 嵊州市| 镇巴县|