强、软、弱、虚
1、强引用(StrongReference)
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。比如:
Object o=new Object(); // 强引用
当内存空间不足,会抛出OutOfMemoryError错误。
如果想要释放,则使用o=null;(何时回收取决于垃圾收集器)
o=null; // 帮助垃圾收集器回收此对象
2、软引用(SoftReference)
内存足够时,不会回收该对象,只有在内存不足的时候JVM才会回收该对象。
作用:软引用主要用来做缓存。
String str=new String("abc"); // 强引用 SoftReference<String> softRef=new SoftReference<String>(str); // 软引用
If(JVM.内存不足()) {
str = null; // 转换为软引用
System.gc(); // 垃圾回收器进行回收
}
3.弱引用(WeakReference)
当垃圾收集器工作时,无论是否内存足够,都会回收该对象。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
String str=new String("abc");
WeakReference<String> abcWeakRef = new WeakReference<String>(str);
If(垃圾收集器扫描到) {
str = null;
System.gc(); // 垃圾回收器进行回收
}
str = null;
System.gc(); // 垃圾回收器进行回收
}
4、虚引用(PhantomReference)
如果一个对象仅持有虚引用,在任何时候都可能被垃圾回收器回收。
虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。
主要作用:当对象被回收时,可以收到一个系统通知。
原文地址:https://blog.csdn.net/mazhimazh/article/details/19752475