2015-07-03 56 views
0

我一直在努力成爲越來越多的記憶聚焦, 和有關垃圾收集的問題。Java垃圾收集從地圖上移除的實例?

在這種情況下配置文件將是一個類,我們有我們的節目,但當用戶在實際登錄的個人資料只會是必要的。

Map<UUID, Profile> profiles; 

public ProfileManager() { 
    profiles = new HashMap<UUID, Profile>(); 
} 

public void login(UUID uuid) { 
    profiles.put(uuid, new Profile(uuid)); 
} 

public void logout(UUID uuid) { 
    if(profiles.containsKey(uuid)) 
     profiles.remove(uuid); 
} 

我的問題是,將它的垃圾收集刪除個人資料? 它沒有設置爲null,而是不再被引用。我不確定這是如何處理的。我想這是因爲它不再被引用,它會被垃圾回收,但是再次,Profile不是空的。

謝謝。

+0

一個對象不能爲null。語句_Profile不爲null_沒有意義。 'null'是一個可以存儲在變量中的參考值。 –

+0

如果它不再被引用,它會在某個時候收集垃圾。 – sstan

+0

謝謝你,這就是我需要知道的。對不起Sotirios沒有任何意義:P – Erveon

回答

0

Profile對象應該被垃圾收集,但是我們不知道GC何時會運行,因此可能您仍然可以訪問已刪除的Profile對象。但只要GC運行並找到任何未引用的對象,它就會從堆中移除。

https://dzone.com/articles/jvm-and-garbage-collection

0

使用java.lang.System.gc(),這個方法運行垃圾collector.Calling該方法說明JVM(Java虛擬機)啓動垃圾收集,這種方法可能被清除的對象可能不是這個決定也留給了JVM。 JVM操作可能因操作系統平臺而異。因此,唯一可能的做法是建議JVM進行垃圾收集。

2

當您從地圖中移除Profile對象時,Profile對象將符合垃圾回收的條件,如果沒有其他引用它的話。之後,垃圾收集器可能會或可能不會立即收集垃圾,具體取決於對象被引用了多長時間。

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

但是你的目的,我建議你只是從地圖上刪除它,確保它沒有其他地方引用,再不用擔心如何垃圾收集工作的細節。