Java:这足以删除对象吗?

Ale*_*lex 1 java gwt garbage-collection hashmap

我有一个HashMap保持对我的应用程序模块的引用.

HashMap<String, Module> modules;
Run Code Online (Sandbox Code Playgroud)

当我这样做:

for(String key:modules.keySet()){
   modules.remove(key);
}
Run Code Online (Sandbox Code Playgroud)

应该没有更多的参考对象因此它们应该在某些时候被GC删除.我是对的还是我错过了什么?这是安全的还是可以以某种方式重新获得对象的访问权限?

这与执行时相同:

modules.clear();
Run Code Online (Sandbox Code Playgroud)

最后一个更复杂的问题:当使用GWT执行此操作时,我可以确定多少对象在浏览器中消失了?我想在用户注销时执行此操作,以防止使用该计算机的人员从前一个用户检索任何信息.当然,大多数模块"忘记"他们的数据是unDetach(),但我不确定,他们都这样做.这个信息当然是加分,如果有人碰巧知道我会感激=)

Mas*_*sim 5

当您遍历keySet并同时删除元素时,第一种方法可能会导致问题.第二种方法应该做正确的事情.如果你没有其他模块参考,他们应该被垃圾收集.