ThreadLocal 造成內存溢出的原因

看到這裏我們就理解了 ThreadLocal 造成內存溢出的原因:如果 ThreadLocal 沒有被直接引用(外部強引用),在 GC(垃圾回收)時,由於 ThreadLocalMap 中的 key 是弱引用,所以一定就會被回收,這樣一來 ThreadLocalMap 中就會出現 key 爲 null 的 Entry,並且沒有辦法訪問這些數據,如果當前線程再遲遲不結束的話,這些 key 爲 null 的 Entry 的 value 就會一直存在一條強引用鏈:Thread Ref -> Thread -> ThreaLocalMap -> Entry -> value 並且永遠無法回收,從而造成內存泄漏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章