Java 如何防止尚未分配的实例被垃圾收集?

How does Java prevent an as yet unassigned instance from being garbage collected?

示例:

public void foo() {
    A a = new A();
}

如果有这一系列事件怎么办?

  1. Java为A分配内存。
  2. A() 构造函数运行。现在堆中有一个实例。
  3. GC 运行。
  4. 该对象没有引用,在分配给 a 之前将其删除。

它如何防止这种情况发生?我将非常感谢链接到解释它的文章。

一旦您知道 call stack is traversed by the garbage collector (GC). So when it traverses the stack of the method foo, it simply knows that there are references (a) 指向该堆内存,这就很容易回答了。

为了知道什么是垃圾,GC 必须首先扫描所有存活的东西。由于有指向该内存的引用(new A());至少在 a 被某个线程在某处使用之前,它被视为活着。