Java 为什么这个空赋值会使对象更快地被垃圾收集?

Java 为什么这个空赋值会使对象更快地被垃圾收集?,java,Java,Oracle Java杂志包含一篇关于JavaFX设计模式的文章,其中包含: 我不明白为什么point=null赋值会使point对象更快地被垃圾收集。每个循环都(重新)分配了变量,循环不会阻塞,因为它只在有东西要得到时才运行 即使循环执行阻塞调用,点变量也会在每次循环迭代中移出作用域,因此它会使引用符合垃圾收集的条件 我错过了什么?文章作者为什么要添加这个特定的null赋值 赋值null将有助于提示编译器不再需要该对象。然而,这不起作用。编译器不可能知道存在对点对象的其他引用。毕竟,对象可能在

Oracle Java杂志包含一篇关于JavaFX设计模式的文章,其中包含:

我不明白为什么
point=null
赋值会使point对象更快地被垃圾收集。每个循环都(重新)分配了变量,循环不会阻塞,因为它只在有东西要得到时才运行

即使循环执行阻塞调用,
变量也会在每次循环迭代中移出作用域,因此它会使引用符合垃圾收集的条件


我错过了什么?文章作者为什么要添加这个特定的
null
赋值

赋值
null
将有助于提示编译器不再需要该对象。然而,这不起作用。编译器不可能知道存在对
对象的其他引用。毕竟,对象可能在另一个列表、另一个队列或其他东西中,可能包含对它的引用。因此,它不是编译器的“提示”,也不是垃圾收集器的有用提示,因为您所做的只是将引用设置为
null
。然而。。。 如果队列是持有对
引用的唯一对象,则通过设置
点=null
释放对它的最后一个引用,这意味着从此点开始,对象不再可访问,并且可以进行垃圾收集


对我来说,设置一个立即离开作用域的
null
引用似乎有点多余。将某物设置为
null
不会神奇地导致GC启动。GC会在任何时候启动,或者在某些情况下,对于具有并行GC的语言,GC可能会持续运行

总结和的现场评论:

我不明白为什么point=null赋值会使point对象更快地被垃圾收集。


不会的。这完全是无稽之谈

我错过了什么?

没什么

文章作者为什么要添加此特定的
null
赋值?


因为文章作者不懂Java。

有一个相关的问题,即取消引用与等待变量超出作用域的性能,因为文章作者不懂Java。它不会。这完全是无稽之谈,“作者是最近当选的Java冠军”,因此作者不理解Java的可能性似乎不大。这仍然不能解释空赋值的必要性,我仍然认为没有优势。“这仍然不能解释空赋值的必要性”没有必要。你不会在Oracle的Java杂志上看到这一点。为什么不呢?这是一本杂志,不是语言规范。
while(!pointQueue.isEmpty()) {
   PointPojo point = pointQueue.poll();
   //coordinate transform data to canvas pixel
   double x = transformXToScreen(point.x);
   double y = transformYToScreen(point.y);
   //encourage the object to be garbage collected sooner
   point = null;
   g.fillOval(x, y, radius, radius);
}