请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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的了解不深,所以我突发了这样想法,希望老师解答一下我这个问题,感谢。

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2020-03-25 15:55:05

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


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


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 Ethan_Qjm #1
    老师,newData不是依然存在并占有空间吗?原来的data会被回收因为原data已经没有引用指向了,但newData依然有空间啊。我不知道我理解得对不对?
    回复 有任何疑惑可以回复我~ 2020-03-25 16:02:55
  • liuyubobobo 回复 提问者 Ethan_Qjm #2
    newData 只是一个引用。newData = new ... 一句话开了空间,newData 指向这个空间;data = newData 一句话,data 也指向这个空间,至此,data 原来指向的空间没有引用了,可以被回收了。当整个函数结束的时候,newData 这个引用的生命周期也结束了,最后就剩下 data 指向新开辟的空间。
    回复 有任何疑惑可以回复我~ 2020-03-25 16:25:15
  • 提问者 Ethan_Qjm 回复 liuyubobobo #3
    感谢老师,我明白了
    回复 有任何疑惑可以回复我~ 2020-03-25 16:30:12
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信