问题1:想知道调用clear()方法后是否会被GC?
问题2:clear和reinitialize的理解
Java HashMap clear()方法从哈希映射中删除所有键/值对。这里只是把table[]置空了table数组的元素,及链表的表头元素;
那么key-value以及当前map对象是否都会被GC掉?
public void clear() {
Node<K,V>[] tab;
modCount++;
if ((tab = table) != null && size > 0) {
size = 0;
for (int i = 0; i < tab.length; ++i)
tab[i] = null;
}
}
同样hashMap还有reinitialize() 这两方法前者可以给用户调用,后者则是内部调用那么区别是什么呢?
/**
* Reset to initial default state. Called by clone and readObject.
*/
void reinitialize() {
table = null;
entrySet = null;
keySet = null;
values = null;
modCount = 0;
threshold = 0;
size = 0;
}
第一个问题:
clear 清空之后,是否被 GC,这取决于 jvm 的策略,不是置空之后立即 GC,即使是强制调用 GC 也不一定会触发 GC。
第二个问题:
reinitialize 是为了初始化到初始状态,使 clone 和 readObject 后整个类的内部字段都是新生成的,这样更彻底。
至于为什么不给用户调用,是因为调用之后内部字段都被置为 null,再次使用 put remove 等方法时会导致异常,因此不能给用户进行调用。