繁体   English   中英

从地图中删除Java垃圾收集实例?

[英]Java Garbage Collecting instance upon removal from map?

我一直在尝试越来越关注内存,并对垃圾回收有疑问。

在这种情况下,Profile是我们程序中的一个类,但是只有在用户实际登录时才需要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,而是不再引用。 我不确定如何处理。 我想考虑一下,因为不再引用它了,所以将其进行垃圾回收,但是再说一次,该配置文件也不为空。

谢谢。

当您从地图上删除Profile对象时,只要其他对象都没有引用它,它就可以进行垃圾回收。 之后,垃圾回收器可能会立即垃圾回收,也可能不会立即垃圾回收,具体取决于引用对象的时间。

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

但是,出于您的目的,我建议您仅将其从地图中删除,确保未在其他任何地方引用它,然后不必担心垃圾收集器如何工作的更详细信息。

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

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

使用java.lang.System.gc(),此方法运行垃圾收集器。调用此方法建议JVM(Java虚拟机)启动垃圾收集,此方法可能会清除对象,但可能不会,因此将决定权留给了JVM 。 JVM的操作可能因操作系统平台而异,因此您唯一可以做的就是建议JVM进行垃圾回收。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM