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();
}
}