一、ThreadLocaljvm
ThreadLocal即線程本地,能夠實現每一個線程存入取出TreadLocal值互不影響。由於TheadLocal底層是用了一個Map存放數據,而這個Map是從當前這個Thread中獲取的,因此每一個線程以前數據不相通。線程
而這個Map裏面key是這個TreadLocal,因此一個線程只能在一個ThreadLocal中存放一個值,要想繼續存放就得多建立ThreadLocal。3d
這個Map底層是一個Entry,這個Entry又繼承自 WeakReference<ThreadLocal<?>>。因此Entry裏面的Key指向ThreadLocal的引用是一個弱引用,目的是爲了防止內存泄漏。對象
二、強軟弱虛引用blog
強引用:只要這個引用存在就不會被垃圾回收器回收繼承
軟引用:當引用爲空或者jvm中堆內存不夠就會被回收隊列
弱引用:只要垃圾回收器進行gc就會被回收內存
虛引用:用於堆外內存,當堆外內存中一個虛引用被回收,這個虛引用會進入一個隊列中,jvm經過這個隊列就知道有對象被回收了,就會收回這塊內存。內存泄漏
固然虛引用也是碰到gc就會被回收。垃圾回收