创建对象的可能性是否最小,在将其分配给引用变量之前,是否有资格进行垃圾回收。
根据this标记有4个阶段,最后阶段Final Marking phase
通过保持java线程暂停来运行。现在,有一个线程创建了一个对象,并在将Final Marking phase
分配给引用变量之前暂停了它。现在,在此阶段,它将对象标识为活动对象,并且应该符合GC的条件。
会发生什么:
如果对象是GCed,则创建它的线程将不具有 恢复后创建的对象。
如果对象未进行GCed, 是什么让它逃脱被识别为孤儿对象。
答案 0 :(得分:0)
是否有一点机会
对于充分错误的实施,足够鲁莽的开发人员绕过VM验证/安全网或invocations of C-x M-c M-butterfly:是的,当然。
另一方面,在一个完美的系统中,根据规范使用行为和使用GC只允许在明确定义的一致执行状态下发生。
答案 1 :(得分:0)
你的想法就像
a = new A();
以
执行 new A();
a =
因此创建了一个对象,然后a
看到等号并查找要分配的内容。这可能永远不会像分配一样工作,你必须能够获得RHS,即,对象必须已经存储在某处。在字节码的情况下,这就是堆栈,所有线程堆栈都是GC根。