1.关键代码与运行结果:
//强引用
Handler handler=new Handler();
//软引用
Handler softHandler=new Handler();
SoftReference<Handler> handlerSoftReference=new SoftReference<>(softHandler);
System.out.println(TAG+"soft="+handlerSoftReference.get());
softHandler=null;
System.gc();
System.out.println(TAG+"soft="+handlerSoftReference.get());
//弱引用
Handler weakHandler=new Handler();
WeakReference<Handler> handlerWeakReference=new WeakReference<>(weakHandler);
System.out.println(TAG+"weak="+handlerWeakReference);
handlerWeakReference=null;
System.out.println(TAG+"weak="+handlerWeakReference);
运行结果:
2.引用类型:
注意:一个对象可能被多种引用(不止一种,可能多种):此时执行gc(堆回收),都不为空
只有一种引用的时候,
3.引用类型的简单使用
1.强引用
1.简单使用:
Handler handler=new Handler();
2.被回收情况:GC执行不回收
2.软引用
1.简单使用
//软引用
Handler softHandler=new Handler();
SoftReference<Handler> handlerSoftReference=new SoftReference<>(softHandler);
System.out.println(TAG+"soft="+handlerSoftReference.get());
softHandler=null;
System.gc();
System.out.println(TAG+"soft="+handlerSoftReference.get());
2.被回收情况:GC执行时,发现内存块溢出了(内存溢出前)回收
3.弱引用
1.简单使用
//弱引用
Handler weakHandler=new Handler();
WeakReference<Handler> handlerWeakReference=new WeakReference<>(weakHandler);
System.out.println(TAG+"weak="+handlerWeakReference);
handlerWeakReference=null;
System.out.println(TAG+"weak="+handlerWeakReference);