黑马程序员技术交流社区

标题: map.put(new<E>( ),new<E>( ))与map.put( , )有什么区别? [打印本页]

作者: 张涛的狂怒    时间: 2014-7-29 15:03
标题: map.put(new<E>( ),new<E>( ))与map.put( , )有什么区别?
本帖最后由 张涛的狂怒 于 2014-8-6 10:00 编辑

weakmap是弱引用类,即对象不使用就会被GC自动清理
运行下面一段代码发现,前三个被回收了,但是最后一个没有被回收。这是为什么?
map.put(new<E>( ),new<E>( ))与map.put(  ,  )有什么区别?
public class WeakHashmapDemo {
        public static void main(String[] args){
                //实例化Map对象
                Map <String,String> map=new WeakHashMap <String,String> ();
               
                map.put(new String("10"), new String("aaa1"));
                map.put(new String("18"), new String("ab1"));
                map.put(new String("14"), new String("aca1"));
                map.put("-4", "brb11");
               
                //进行垃圾回收
                System.gc();
                System.out.println(map);
        }
}
作者: 张涛的狂怒    时间: 2014-7-29 15:07
weakmap是弱引用类,即集合不使用就会自动清理
map其他子类中的数据是强引用类,即内存不足时,JVM出现outofMemeryError也不会回收数据
软引用 :即内存不足时,JVM会回收数据
虚引用:和没有任何引用一样
作者: 张涛的狂怒    时间: 2014-7-29 15:44
都没人理呢
作者: 张涛的狂怒    时间: 2014-7-30 19:24
人都干嘛去了,是不是太简单了???
作者: a6511631    时间: 2014-7-31 10:28
在你这段代码里,加不加都不会有区别的。一开始定义的时候,你已经用了泛型了啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2