从静态Map中删除对象垃圾?

时间:2012-07-02 07:05:02

标签: java object memory-management garbage-collection

我的应用程序中有一个静态地图,当我点击链接时会填充该地图。 之后,它会生成大量对象并存储它们。现在我有一个链接可以清除这张地图。

这是我的代码。

Hello1 hello1 = new Hello1();
hello1.setHello("Helllollo1");
Hello hello = new Hello();
hello.setHello1(hello1);
hello.setHello("Hellollo");
setMap("1", (Object)hello);

Hello1 hello2 = new Hello1();
hello2.setHello("Helllollo1");
Hello helo = new Hello();
helo.setHello1(hello2);
helo.setHello("Hellollo");
setMap("2", (Object)helo);

Hello1 hello3 = new Hello1();
hello2.setHello("Helllollo1");
Hello helo1 = new Hello();
helo1.setHello1(hello3);
helo1.setHello("Hellollo");
setMap("3", (Object)helo1); 

现在我有一个方法removeMap,其工作原理如下

public static void removeMap(String key){

        if(map.containsKey(key)){

            map.remove(key);
        }   
    }

所以当我在添加上面三个对象之后为单个键调用此方法时,是否收集了垃圾收集对象?

3 个答案:

答案 0 :(得分:2)

是的,清除地图后,从中引用的对象将有资格进行垃圾收集,如果没有其他强引用。

请注意,从地图中删除条目不会立即导致垃圾收集 - 这只是意味着地图将不再阻止对象被垃圾回收。

答案 1 :(得分:0)

是的,当您清除Map或从中删除对象时,对象将有资格进行垃圾回收。由于对象没有任何引用,因此它们符合GC的条件。

任何无法访问或没有引用的对象都有资格进行收集。

答案 2 :(得分:0)

你的问题体现了矛盾。如果对象,或者更确切地说是对象的引用已经从地图中移除,它就不再是“在地图内部”。