java中的四大引用(强,软,弱,虚)

  • 2019 年 10 月 7 日
  • 笔记
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();  	}    }