java中的四大引用(强,软,弱,虚)
package com.shi.ref; import java.util.HashMap; import java.util.WeakHashMap; /** * 弱引用HashMap的使用 * @author shiye * * 结果: {1=HashMap} {1=HashMap} {1=HashMap} 1 ******************** {2=WeakHashMap} {2=WeakHashMap} {} 0 */ public class TestWeakHashMap { public static void main(String[] args) { myHashMap(); System.out.println("********************"); weakHashMap(); } /** * 强引用HashMap */ static void myHashMap() { HashMap<Integer,String> map = new HashMap<>(); Integer key = new Integer(1); String value = "HashMap"; map.put(key, value); System.out.println(map); key = null; System.out.println(map); System.gc(); System.out.println(map + " " + map.size()); } /** * 弱引用HashMap */ static void weakHashMap() { WeakHashMap<Integer,String> map = new WeakHashMap<>(); Integer key = new Integer(2); String value = "WeakHashMap"; map.put(key, value); System.out.println(map); key = null; System.out.println(map); System.gc(); System.out.println(map + " " + map.size()); } }
package com.shi.ref; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; /** * 虚引用 结合 引用队列 * @author shiye * 结果 java.lang.Object@15db9742 java.lang.Object@15db9742 null ************************ null null java.lang.ref.WeakReference@6d06d69c */ public class TestReferenceQueue { public static void main(String[] args) throws InterruptedException { Object o1 = new Object(); ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>(); WeakReference<Object> weakReference = new WeakReference<Object>(o1, referenceQueue); System.out.println(o1); System.out.println(weakReference.get()); System.out.println(referenceQueue.poll()); System.out.println("************************"); o1 = null; System.gc(); Thread.sleep(500); System.out.println(o1);//o1 = null; System.out.println(weakReference.get());//o1 = null System.gc(); System.out.println(referenceQueue.poll());//o1 = null System.gc(); } }