import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
public class firstClass {
public static void main(String[] args) {
String str = new String("abc");
SoftReference<String>sr= new SoftReference<String>(str);
//强引用
//模拟强制回收《模拟内存不足》
sr.clear();//强制回收
if(sr.get() != null ) {
System.out.println(sr.get());//还没有被GC回收,直接获取
System.out.println("软引用正常");
}
else {
sr= new SoftReference<String>(str);//重新构建
System.out.println(sr.get());
System.out.println("软引用被回收,重新构建");
//如果没有被强制回收,就会走if语句,否则走else语句
}
//弱引用
ReferenceQueue<String> qu = new ReferenceQueue<String>();
WeakReference<String> wf = new WeakReference<String>(str,qu);
}
}
/* 总结
* 回收时间 用途 生存时间
* 强引用: 从来不会 对象的一般状态 JVM停止的时候
* 软引用: 内存不足的时候 对象的缓存 内存不足的时候
* 弱引用: GC回收 对象的缓存 GC运行后停止
* 虚引用: 任何时间 跟踪对象被回收的活动 、不影响
*
*
*/