public static void main(String[] args) { String abc=new String("abc"); WeakReference<String> weak=new WeakReference<String>(abc); System.out.println("print:" +weak.get()); abc=null; System.gc(); System.out.println("print:" +weak.get()); }
弱引用有什麼好處?
強引用的對象GC的要求嚴格,必須沒有引用的狀況下才能夠回收(GC Roots不可達),Java設計了一種短暫生命週期的對象,弱引用對象,只在建立和FGC以前有效,FGC以後,無論有沒有繼續引用,都直接釋放內存的一種機制。
幫助更好的管理內存。面試
ThreadLocal中 弱引用的使用架構
ThreadLocal 和OOM
問題來了,若是一個線程不停的給不一樣thradLocal屬性設置值,而且該線程長期不結束,那麼這些threadLocal對象會在fgc的時候被GC掉,可是value值並不會被GC掉,由於是線程.ThreadLocalMap.Entry.value 在強引用,因此這些value值,既不能被訪問到(key已經被回收了),又沒法被回收,並且全部引用了這個ThreadLocal的線程裏,都有這個現象。因此容易形成OOM學習
ThreadLocal和線程池
線程池裏面的ThreadLocal會出錯嗎?
會的,因此新任務啓動的時候,要init,把全部threadlocal屬性都置爲null線程
以爲不錯請點贊支持,歡迎留言或進個人我的羣855801563領取【架構資料專題目合集90期】、【BATJTMD大廠JAVA面試真題1000+】,本羣專用於學習交流技術、分享面試機會,拒絕廣告,我也會在羣內不按期答題、探討。設計