首页 > 技术文章 > java中的引用类型

hhachi 2020-05-09 16:58 原文

强引用

内存溢出也不会清除对象。

软引用

SoftReference<byte[]> m = new SoftReference<>(new byte[1024]);
软引用适合缓存使用,堆空间不足就会清除掉软引用。

弱引用

WeakReference m = new WeakReference<>(new M());
只要有垃圾回收 就会回收对象。

虚引用

PhantomRerence
get不到。
管理直接内存,DirectByte

ThreadLocal

  • set方法
    首先 获取当前线程t,然后getMap(t)得到一个TreadLocalMap(当前t的成员变量),接着把tl的实力对象作为k,传进set方法的的值作为value,调用TreadLocalMap.set(this,value)的方法。TreadLocalMap.set()中,new Entry() extends WeakReference<>;
    因为 Tread线程中有tl指向TreadLocal,TreadLocalMap中entry的key也指向TreadLocal。所以如果TreadLocalMap中的entry不设置为弱引用,即使tl置空,gc也不会收集TreadLocal。导致内存溢出

推荐阅读