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

溫馨提示×

溫馨提示×

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

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

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

台中县| 宣武区| 南召县| 图片| 台中县| 景宁| 香格里拉县| 沈丘县| 佛冈县| 常山县| 肃北| 巧家县| 宜阳县| 苏尼特右旗| 大安市| 舒兰市| 巩留县| 安义县| 石嘴山市| 石狮市| 玛纳斯县| 三江| 岑溪市| 东安县| 托克逊县| 石家庄市| 法库县| 新疆| 鹿泉市| 穆棱市| 开原市| 吴桥县| 灯塔市| 顺平县| 望都县| 吴忠市| 柞水县| 博白县| 义乌市| 修水县| 勃利县|