package others.three;
import java.lang.ref.WeakReference;
/**
- 接口的其他容器
- 一:WeakHashMap
- 引用分类:
-
1.强引用:StrongReference;引用指向对象, gc(Garbage collection)运行时不回收
-
2.软引用:SoftReference gc运行时可能回收(jvm内存不够)
-
3.弱引用:WeakReference gc 运行时立即回收
-
4.虚引用.PhantomReference 类似于无引用,主要跟踪对象被回收的状态,不能单独使用
-
必须与引用队列(ReferenceQueue)联合使用
- 目的: 避免对象长期驻留在内存中,解决垃圾回收时机问题
- WeakHashMap
-
键为弱引用,回收键后自动删除key-value对象
- 二:其他Map实现类
-
1.IdenttyHashMap:
-
键只以地址去重,而不是比较hashcode与equals
-
注意:键是常量池中的字符串
-
2.EnumMap
-
键必须为枚举的值
-
构造器:public EnumMap(指定枚举class对象)
*/
public class RefDemo {
public static void main(String[] args) {
//字符串常量池不是 共享的
String str = new String( "bjsxt is very good");
//弱引用 管理对象
WeakReference<String> wr = new WeakReference<String>(str);
System.out.println("gc运行前"+wr.get());
//断开引用
str = null;
//通知回收
System.gc();
System.runFinalization();
//对象被回收
System.out.println("gc弱引用运行后"+wr.get());//结果;运行前后不能回收
System.out.println("***************************");
testStrong();
}
public static void testStrong(){
//字符串常量池 共享(不能回收) 强引用
String str = "bjsxt is very good";
//弱引用 管理对象 ; 用了new
WeakReference<String> wr = new WeakReference<String>(str);
System.out.println("gc运行前"+wr.get());
//断开引用
str = null;
//通知回收
System.gc();
System.runFinalization();
System.out.println("gc强引用运行后"+wr.get());//结果;运行前后不能回收
}
}