java集合WeakHashMap测试

来源:互联网 发布:淘宝宜家代购是真的吗 编辑:程序博客网 时间:2024/06/05 22:59
import java.util.*;
/**
 * WeakHashMap:一个weak key的Map,
 * 是为某些特殊问题而设计的。它能让Map释放其所持有的对象。
 * 如果某个对象除了在Map当中充当键之外,
 * 在其他地方都没有引用的话,那它将被当作垃圾回收。
 */
public class WeakHashMapTest
{
    public static void main(String[] args)
    {
        //
        WeakHashMap whm = new WeakHashMap();
        
        //放入两个没有外部引用的键值对
        whm.put(new String("语文") , new String("良好"));
        whm.put(new String("数学") , new String("及格"));
        System.out.println("原有的集合元素:whm="+whm);//whm={数学=及格, 语文=良好}
        //key语文和数学,没有外部的引用指向它
        //垃圾回收器会回收调这两个键值对key-value  
        //语文--良好,数学--及格
        // 通知系统立即进行垃圾回收,
        System.gc();
        System.runFinalization();
      //垃圾回收器把集合中这两个没有外部引用的键值对释放掉
        System.out.print("垃圾回收器,回收没有外部引用的WeakHashMap集合元素: whm="+whm+"\n");//whm={}
        System.out.println("-------------------------------");
        String yy = new String("英文");
        whm.put(yy , new String("中等"));//放入有外部引用的键值对的
        System.out.println("whm="+whm);//whm={英文=中等}
        // 通知系统立即进行垃圾回收
        System.gc();
        System.runFinalization();
        System.out.println("有外部引用指向的集合元素,垃圾回收器不会回收:");
        System.out.println("whm="+whm);//whm={英文=中等} 有外部引用不回收
        
        yy=null;//把外部引用置空
        System.out.println("外部引用置空后:");
        System.gc();
        System.runFinalization();
        System.out.println("whm="+whm);
        System.out.println("-------------------------------");
        whm.put("java" , new String("中等"));//key "java" 在常量区,垃圾会收器回收不到
        System.out.println(whm);
        System.gc();
        System.runFinalization();
        System.out.println("垃圾回收器无法通过常量区的键回收:");
        System.out.println(whm);
        
    }
}