2012-07-02 31 views
0

我在我的应用程序中有一个静态地图,当我点击一个链接时它会被填充。 之后,它使大量的对象和存储它们。现在我有一个链接可以清除这张地图。从静态Map中移除时是否收集对象垃圾?

这是我的代码。

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

所以,当我要求一个密钥这种方法将以上三种对象之后,是该对象垃圾回收与否?

+0

垃圾收集的资格是一个很好的记录的主题,我建议你做一些研究。您还可以将分析器附加到您的流程中,并观察当前生活的对象的数量。 – Justin

回答

2

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

请注意,移除地图中的条目将不会立即原因垃圾收集 - 它只是意味着该地图将不再是防止的对象被垃圾收集。

0

是的,当您的Map被清除或您从中删除对象时,对象将有资格进行垃圾回收。因为对象没有任何引用,他们有资格获得GC。

任何无法访问或没有参考的对象都有资格收集。

0

你的问题体现了矛盾的条款。如果该对象或对象的引用已从Map中删除,则它不再是“映射内部”的对象。