从地图中删除Java Garbage Collecting实例?

时间:2015-07-03 19:31:29

标签: java dictionary garbage-collection instance

我一直在努力让记忆越来越集中, 并对垃圾收集有疑问。

在这种情况下,Profile将是我们程序中的一个类,但只有在用户实际登录时才需要配置文件。

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,而是不再引用。我不确定这是如何处理的。我想,因为它不再被引用,它会被垃圾收集,但是再次,配置文件不是空的。

谢谢。

3 个答案:

答案 0 :(得分:2)

当您从地图中删除它时,Profile对象将有资格进行垃圾收集,如果没有其他任何引用它。之后,垃圾收集器可能会或可能不会立即进行垃圾收集,具体取决于对象的引用时间。

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

然而,出于您的目的,我建议您只需将其从地图中删除,确保它没有在其他任何地方引用,然后不要担心垃圾收集器如何工作的更精细细节。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

使用java.lang.System.gc(),此方法运行垃圾收集器。调用此方法建议JVM(Java虚拟机)启动垃圾收集,此方法可能会清除对象可能不会,该决定仍然存在到JVM。根据操作系统平台,JVM操作可能会有所不同。所以你唯一能做的就是建议JVM进行垃圾收集。