强引用
使用new方法创造出来的对象,默认都是强引用。GC的时候,就算内存不够,抛出OutOfMemoryError也不会回收对象,死了也不回收
软引用
需要用Object.Reference.SoftReference来显示创建。如果内存够,GC的时候不回收。内存不够,则回收。常用于内存敏感的应用,比如高速缓存
弱引用
需要用Object.Reference.WeakReference来显示创建。无论内存够不够,GC的时候都回收,也可以用在高速缓存上
虚引用
软应用和弱引用可以通过get()方法获得对象,但是虚引用不行。虚引用形同虚设,在任何时候都可能被GC,不能单独使用,必须配合引用队列(ReferenceQueue)来使用。设置虚引用的唯一目的,就是在这个对象被回收时,收到一个通知以便进行后续操作,有点像Spring的后置通知
引用队列
弱引用、虚引用被回收后,会被放到引用队列里面,通过poll方法可以得到
WeakHashMap
传统的HashMap就算keynull了,也不会回收键值对。但是如果是WeakHashMap,一旦内存不够用时,且keynull时,会回收这个键值对