怎么理解Java中HashMap的clear和reinitialize

问题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;
    }
阅读 3.3k
1 个回答

第一个问题:
clear 清空之后,是否被 GC,这取决于 jvm 的策略,不是置空之后立即 GC,即使是强制调用 GC 也不一定会触发 GC。

第二个问题:
reinitialize 是为了初始化到初始状态,使 clone 和 readObject 后整个类的内部字段都是新生成的,这样更彻底。
至于为什么不给用户调用,是因为调用之后内部字段都被置为 null,再次使用 put remove 等方法时会导致异常,因此不能给用户进行调用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题