0


我创建了一些 HashMap < String, XYZ >,其键类型为字符串,值类型为某个 XYZ 类。现在,对于某些条件检查,我想释放/垃圾收集整个 HashMap 以及它持有的 XYZ 类型的各个对象. 是否可以在不迭代哈希映射并将每个对象设置为 null 的情况下做到这一点?我想通过仅将 HashMap 设置为 null 将不起作用。我如何确保以后收集的对象是垃圾收集的?

如果我这样做:

XYZ obj = new XYZ();
hm.put("<unique-id>",obj);

XYZ obj2 = new XYZ();
hm.put("<unique-id>",obj2);

.
.
.<more operations>
.
.
hm = null;

我的代码在 hm=null 语句之后不再引用 obj 或 obj2 。


那么我可以确定 jvm 很快也会垃圾收集 obj 和 obj2 吗?


此外,在 hashmap 是一个巨大集合的情况下,我不想使用 Iterator over HashMap 来获取和迭代每个对象并将其设置为 null。

只是 hm=null 是否为我执行了 GCing 整个对象集合 + 映射的上述内容?

4

1 回答 1

3

如果不再引用某个对象,则可以确定该对象已被正确地进行垃圾回收。这意味着,如果您将哈希映射设置为null并且您知道映射中的所有项目都没有被其他对象引用,那么它们就会被垃圾回收。如果您想手动调用 gcc,请记住,是否执行 gcc 进程最终由 JVM 决定!

于 2013-08-17T23:39:15.183 回答