引用的分类
引用的分类
强引用:StrongReference引用指向对象,gc(Garbage collection)运行时不回收
软引用:SoftReference,gc运行时可能回收(jvm内存不够)
弱引用:WeakReference,gc运行时立即回收
虚引用:PhantomReference类似无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列(ReferenceQueue)联合使用
目的
避免对象长时间驻留在内存中,解决垃圾回收机制回收时机问题
1 /** 2 * 引用分类:强、软、弱、虚 3 * 强与弱引用 4 * @author Administrator 5 * 6 */ 7 public class RefDemo { 8 9 /** 10 * @param args 11 */ 12 public static void main(String[] args) { 13 //字符串常量池 14 String str =new String("bjsxt is very good"); 15 //弱引用 管理 对象 16 WeakReference<String> wr =new WeakReference<String>(str); 17 System.out.println("gc运行前:"+wr.get()); 18 //断开引用 19 str =null; 20 //通知回收 21 System.gc(); 22 System.runFinalization(); 23 //对象被回收 24 System.out.println("gc运行后:"+wr.get()); 25 } 26 public static void testStrong(){ 27 //字符串常量池 共享(不能回收) 28 String str ="bjsxt is very good"; 29 //弱引用 管理 对象 30 WeakReference<String> wr =new WeakReference<String>(str); 31 System.out.println("gc运行前:"+wr.get()); 32 //断开引用 33 str =null; 34 //通知回收 35 System.gc(); 36 System.runFinalization(); 37 System.out.println("gc运行后:"+wr.get()); 38 } 39 40 } 41 42 /** 43 * WeakHashMap 键为弱类型,gc运行立即回收 44 * @author Administrator 45 * 46 */ 47 public class WeakHashMapDemo { 48 49 /** 50 * @param args 51 */ 52 public static void main(String[] args) { 53 WeakHashMap<String,String> map =new WeakHashMap<String,String>(); 54 //测试数据 55 //常量池对象,不会回收 56 map.put("abc", "a"); 57 map.put("d", "test"); 58 //gc运行 已被回收 59 map.put(new String("bjsxt"), "c"); 60 map.put(new String("dsf"), "d"); 61 62 //通知回收 63 System.gc(); 64 System.runFinalization(); 65 66 System.out.println(map.size()); 67 } 68 69 }