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不是空的。
谢谢。
答
Profile对象应该被垃圾收集,但是我们不知道GC何时会运行,因此可能您仍然可以访问已删除的Profile对象。但只要GC运行并找到任何未引用的对象,它就会从堆中移除。
答
使用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
但是你的目的,我建议你只是从地图上删除它,确保它没有其他地方引用,再不用担心如何垃圾收集工作的细节。
一个对象不能为null。语句_Profile不为null_没有意义。 'null'是一个可以存储在变量中的参考值。 –
如果它不再被引用,它会在某个时候收集垃圾。 – sstan
谢谢你,这就是我需要知道的。对不起Sotirios没有任何意义:P – Erveon