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的相关知识,仅供学习并未深入,如有不正之处欢迎大佬指正,必定虚心改正。