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

时间:2015-07-10 06:30:28

标签: java multithreading garbage-collection

创建对象的可能性是否最小,在将其分配给引用变量之前,是否有资格进行垃圾回收。

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

会发生什么:

  1. 如果对象是GCed,则创建它的线程将不具有 恢复后创建的对象。

  2. 如果对象未进行GCed,     是什么让它逃脱被识别为孤儿对象。

2 个答案:

答案 0 :(得分:0)

  

是否有一点机会

对于充分错误的实施,足够鲁莽的开发人员绕过VM验证/安全网或invocations of C-x M-c M-butterfly:是的,当然。

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

答案 1 :(得分:0)

你的想法就像

a = new A();

执行
    new A();
a = 

因此创建了一个对象,然后a看到等号并查找要分配的内容。这可能永远不会像分配一样工作,你必须能够获得RHS,即,对象必须已经存储在某处。在字节码的情况下,这就是堆栈,所有线程堆栈都是GC根。