关于新建数组空间释放问题

来源:3-7 循环队列的实现

Ethan_Qjm

2020-03-25

private void resize(int newCapacity) {
        E[] newData = (E[])new Object[newCapacity + 1];
        for(int i = 0; i < size; i++) {
            newData[i] = data[(i+front) % data.length];
        }
        data = newData;
        newData = null;                 // 不知道有没有用************
        front = 0;
        tail = size;
    }

老师,我想问一下,如上代码,其他的都和你的代码是一样的,在我注释的地方,我这样加上这一句,newData的内存是否更快的被GC回收呢?因为我对GC的了解不深,所以我突发了这样想法,希望老师解答一下我这个问题,感谢。

写回答

1回答

liuyubobobo

2020-03-25

这里是不需要的。当然你加上没有错。


因为 data = newData 一句话,就已经让 data 不再指向原来的内存空间了,所以原来的内存空间不再有引用,GC 就已经可以正确的判断出,这个内存空间可以释放了:)


继续加油!:)

0
3
Ethan_Qjm
回复
liuyubobobo
感谢老师,我明白了
2020-03-25
共3条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程