这是我的LinkedList类中删除函数的一个示例代码,该函数从中间删除一个节点。
temp.getPrev().setNext(temp.getNext());
temp.getNext().setPrev(temp.getPrev());
temp.setNext(null);
temp.setPrev(null);
我的问题是,我是否必须将temps next和prev引用设置为null,或者垃圾收集器是否自动处理这个?。如果你能帮助我,我将不胜感激。无论如何,谢谢你。
垃圾回收器分析是否存在对对象的任何引用。由于在方法完成后没有对temp
的引用,GC应该删除此对象。
垃圾收集器将在对temp
没有引用时查看。因此,您不必关心取消传出引用——如果您不能再访问temp,它将被垃圾收集(最终)。
我认为你不应该这样做。节点不再在任何地方被引用,因此即使它引用了有效的对象,它也将被垃圾收集。
你必须确保没有对temp的实时引用。你不需要做任何额外的事情。
GC只考虑对对象的引用。对象是否具有对其他对象的引用并不重要。
我的问题是,我是否必须将temps next和prev引用设置为null,或者垃圾收集器是否自动处理这个?
在对象变得不可访问之前,您不必将对象字段中的引用设置为null。
垃圾收集器也不会为您将它们设置为null。
但是,从不可访问的对象引用对象并不能阻止垃圾收集。
因此,如果以后对下一个(或上一个)节点的唯一引用来自其他无法访问的节点,则可以收集该节点。