2012-07-02 33 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中刪除,則它不再是「映射內部」的對象。