引用类型

强引用

普通对象,GCroot能引用到就不回收。

软引用

用于内存敏感的高速缓存。
内存不足时会被回收。
实际应用中使用ReferenceQueue,回收后引用进入ReferenceQueue

弱引用

也用于缓存,但更容易被回收。
内存充足时也会被回收。
实际应用中使用ReferenceQueue,回收后引用进入ReferenceQueue

案例: ThreadLocal的key

ThreadLocalkey是弱引用,被回收后,keynull,此时value无法被访问,但是有强引用。
但是每次发生get,set,remove的时候,会移除keynullentry,消除内存泄露。

虚引用

完全不影响回收,相当于没引用。
必须和引用队列 (ReferenceQueue)联合使用,回收后引用进入ReferenceQueue

案例:堆外内存管理

推荐文章