java-初识引用分类及Map实现类WeakHashMap

1.同样的,话不多讲直接上代码

(1)认识了解下引用分类及其作用

 1 package com.otherMapProduce;
 2 
 3 import java.lang.ref.WeakReference;
 4 /*
 5  * IdentityHashMap:键只以地址去重,而不是比较hashcode与equals,键是常量池中的字符串
 6  * EnumMap:键必须为枚举的值,构造器:public EnumMap(指定枚举的class对象)
 7  * 引用分类:
 8  * 1.强引用:StrongReference:引用指向对象,gc(Garbage Collection)运行时不回收
 9  * 2.软引用:SoftReference:gc运行时可能回收(jvm内存不够则无法回收)
10  * 3.弱引用:WeakReference:gc运行时立即回收
11  * 4.虚引用:PhantomReference类似于无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列(ReferenceQueue)联合使用
12  * 目的:
13  * 避免对象长期驻留在内存中,解决垃圾回收机制回收时机问题
14  */
15 public class RefenenceTest {
16 
17     public static void main(String[] args) {
18         //常量池字符串,共享(不可回收)
19         String str="I like codes very much!";
20         //非常量池字符串
21         String str2=new String("I like codes very much!");
22         //弱引用管理对象
23         WeakReference<String> s=new WeakReference<String>(str);
24         WeakReference<String> s2=new WeakReference<String>(str2);
25         System.out.println("垃圾回收前str:"+s.get());
26         System.out.println("垃圾回收前str2:"+s.get());
27         //断开引用
28         str=null;
29         str2=null;
30         //通知回收
31         System.gc();
32         System.runFinalization();
33         System.out.println("垃圾回收后str:"+s.get());
34         System.out.println("垃圾回收后str2:"+s2.get());
35     }
36 }

效果截图:

2.WeakHashMap的简单使用:

 1 package com.otherMapProduce;
 2 
 3 import java.util.Iterator;
 4 import java.util.Map.Entry;
 5 import java.util.Set;
 6 import java.util.WeakHashMap;
 7 //WeakHashMap:键为弱引用,回收键后自动删除key-value对象
 8 public class WeakHashMapTest {
 9 
10     public static void main(String[] args) {
11         
12         WeakHashMap<String,String> map=new WeakHashMap<String,String>();
13         //放入测试数据,分别放入常量池对象和非常量池对象,前者不会回收,后者会回收
14         //常量池对象
15         map.put("A", "葵花宝典");
16         map.put("B", "九阴真经");
17         //非常量池对象
18         map.put(new String("C"),"九阳神功");
19         map.put(new String("D"), "乾坤大挪移");
20         System.out.println("未经过垃圾回收前 : "+map.size());
21         //借助Set容器构造迭代器将它们读出来
22         Set<Entry<String, String>> set=map.entrySet();
23         Iterator it=set.iterator();
24         System.out.println("存放的数据为:");
25         while(it.hasNext()) {
26             System.out.print(it.next()+" ");
27         }
28         //通知回收
29         System.gc();
30         System.runFinalization();
31         System.out.println();
32         System.out.println("经过垃圾回收后: "+map.size());
33     }
34 
35 }

效果截图:

ps:这里只是简单了解一下引用及WeakHashMap的相关知识,仅供学习并未深入,如有不正之处欢迎大佬指正,必定虚心改正。

猜你喜欢

转载自www.cnblogs.com/weekstart/p/10784381.html