我有一个 HashMap,用于保存对我的应用程序模块的引用。
HashMap<String, Module> modules;
当我这样做时:
for(String key:modules.keySet()){
modules.remove(key);
}
不应该再引用这些对象,因此它们应该在某个时候被 GC 删除。我是对的还是我错过了什么?这是安全的还是有可能以某种方式重新获得对对象的访问权?
这是否与执行时发生的情况相同:
modules.clear();
?
最后是一个更复杂的问题:当使用 GWT 执行此操作时,我可以确定对象在浏览器中消失了多少?我想在用户注销时执行此操作,以防止有人使用下一台计算机检索前一个用户的任何信息。当然,大多数模块都会在 unDetach() 中“忘记”它们的数据,但我不确定,所有模块都会这样做。这些信息当然是加分项,如果有人碰巧知道我将不胜感激 =)
最佳答案
当您遍历 keySet 并同时删除元素时,第一种方法可能会导致问题。第二种方法应该做正确的事情。如果您没有对这些模块的其他引用,它们应该被垃圾回收。
关于Java:这足以删除对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7727054/