中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

富顺县| 睢宁县| 桐城市| 原平市| 连云港市| 自贡市| 望谟县| 雷州市| 四川省| 进贤县| 义马市| 鄂尔多斯市| 岑巩县| 睢宁县| 贵南县| 武陟县| 溧水县| 南雄市| 垣曲县| 平武县| 普兰县| 杭锦旗| 邓州市| 万宁市| 特克斯县| 柳州市| 闵行区| 佛教| 合水县| 唐山市| 阳泉市| 巨鹿县| 南华县| 新野县| 南康市| 临泉县| 集安市| 时尚| 彭泽县| 固原市| 永登县|