介绍
JAVA中有四种引用类型强,软,弱,虚。
强引用
如何创建
直接new即可
Object object = new Object();
如何回收
垃圾回收如果发现被强引用关联的对象,永远不会进行回收,当创建新对象内存不足时,JVM会抛出OutOfMemoryError异常。
对象不使用时可以手动置为null
object=null;
如何使用
正常new即可
软引用
如何创建
使用SoftReference<>将对象包裹起来即可。
SoftReference<Object> sr = new SoftReference<Object>(new Object());
如何回收
软引用会在准备创建对象,但是内存不足时。回收掉所有的只有软引用关联的对象。
如何使用
一般用于缓存,过滤器这种实在不行可以丢掉的数据。
我的项目hongyan中布隆过滤器就使用了软引用。
弱引用
如何创建
WeakReference<Object> sr = new WeakReference<Object>(new Object());
如何回收
弱引用会在GC回收的时候,直接回收掉所有的只有弱引用关联的对象。
如何使用
参考ThreadLocal,其中的KEY就是弱引用的。
虚引用
如何创建
虚引用必须和引用队列关联使用
PhantomReference<Object> pr = new PhantomReference<Object>(new Object(), new ReferenceQueue<Object>());
如何回收
虚引用视同于无引用,会在没有其他引用时被GC回收
如何使用
一般用于堆外内存的回收。
总结
引用类型 | 何时回收 |
---|---|
强 | 永不 |
软 | 内存不足时 |
弱 | 发生GC时 |
虚 | 视为无引用 |
无 | 发生GC时 |