我有一些HashMap<字符串,XYZ>创建了一个键类型为String和一些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而不是HashMap来获取并迭代每个对象并将其设置为null。
只有hm = null才能完成GCing整个对象集合的上述内容并为我映射吗?
答案 0 :(得分:3)
如果不再引用对象,则可以确保该对象已正确收集垃圾。这意味着,如果您将哈希映射设置为null
,并且您知道地图中的所有项目都未被其他对象引用,那么它们将被垃圾收集。如果你想手动调用gcc,请记住,决定是否执行gcc进程最终是由JVM做出的!