Java垃圾收集从地图上移除的实例?

问题描述:

我一直在努力成为越来越多的记忆聚焦, 和有关垃圾收集的问题。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

Profile对象应该被垃圾收集,但是我们不知道GC何时会运行,因此可能您仍然可以访问已删除的Profile对象。但只要GC运行并找到任何未引用的对象,它就会从堆中移除。

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

使用java.lang.System.gc(),这个方法运行垃圾collector.Calling该方法说明JVM(Java虚拟机)启动垃圾收集,这种方法可能被清除的对象可能不是这个决定也留给了JVM。 JVM操作可能因操作系统平台而异。因此,唯一可能的做法是建议JVM进行垃圾收集。

当您从地图中移除Profile对象时,Profile对象将符合垃圾回收的条件,如果没有其他引用它的话。之后,垃圾收集器可能会或可能不会立即收集垃圾,具体取决于对象被引用了多长时间。

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

但是你的目的,我建议你只是从地图上删除它,确保它没有其他地方引用,再不用担心如何垃圾收集工作的细节。