它会发生吗 - 在 java 中创建对象并立即收集垃圾

Will it happen - object created and immediately garbage collected in java

是否有最小的机会创建对象并且在将其分配给引用变量之前有资格进行垃圾回收。

根据 this 标记有 4 个阶段,最后一个阶段 Final Marking phase 通过保持 java 线程暂停来运行。现在线程有可能创建一个对象并在将其分配给引用变量之前被 Final Marking phase 暂停。现在在这个阶段,它将对象识别为活动对象并且应该符合 GC 的条件。

发生了什么:

  1. 如果对象被 GC,创建它的线程将不会有 恢复后创建的对象。

  2. 如果对象没有被GC, 是什么让它逃避被识别为孤儿对象。

Is there a slightest chance

对于足够多的 bug 实现,非常鲁莽的开发人员会绕过 VM verification/safety 网络或 invocations of C-x M-c M-butterfly:是的,当然。

另一方面,在一个完美的系统中,根据规范运行和使用 GC 只允许在定义明确、一致的执行状态下发生。

你的思路是这样的

a = new A();

被执行为

    new A();
a = 

因此创建了一个对象,然后 a 看到等号并查找要分配的内容。这对于作业来说永远行不通,您必须能够获得 RHS,即该对象必须已经存储在某个地方。在字节码的情况下,这就是堆栈,所有线程堆栈都是 GC 根。