回答
不确定!
因为垃圾收集器的回收机制由 JVM 控制,而不是由程序员控制,JVM 会根据一些策略和算法来决定何时进行垃圾回收。
一种情况是,在垃圾收集器执行过程中,我们将一个对象的引用设置为 null,但是由于垃圾回收器没有检测到(该对象未被正确标记),JVM 仍然认为该对象是存活对象,所以不会在本次 GC 中将其回收,那么该对象就会变成“浮动垃圾”。只有在下一次垃圾回收时,垃圾收集器才会检测到该对象不可达,并将其回收。
还有一点,垃圾收集器并不是在我们每次设置引用为 null 时就执行回收,它通常是在堆内存不足时触发,或者由 JVM 决定需要释放内存时执行。如果我们每设置一个 null 就执行一次,那性能得多低?