垃圾收集了多少个对象?

时间:2010-08-10 00:07:35

标签: java

在下面的示例程序中,在执行Thread.sleep(1000)行之前会有多少对象被垃圾收集?

public class GCExample {

public static void main(String[] args) throws InterruptedException {
    GCExample gc = new GCExample();
    gc.doSomeThing();
    Thread.sleep(1000);
}
public void doSomeThing(){
    Object[] obj = new Object[2];
    for(int i=0;i<obj.length;i++){
        obj[i] = new Object();
    }
}

}

3 个答案:

答案 0 :(得分:6)

鉴于GC的非确定性,我会说一个与一段字符串长度相同的数字。

答案 1 :(得分:4)

Thread.sleep之前,无法知道将收集多少项目。它可能是零,或者它可能是您的整个对象数组,这意味着您将收集三个对象(来自此代码,但可能还有其他代码在您的应用程序中)。

然而,它将是零或三,因为当obj无根时,它的两个元素(2个新的对象实例)也将被无根,所以它们都将被收集在同一个传递中

然而,很可能你不会在那里看到任何集合,也不会收集任何对象。

答案 2 :(得分:1)

唯一可以确定的方法是衡量它。您可以使用java.lang.ref.Reference。

我最好的猜测是不会有任何垃圾收集,但这可能因JVM到JVM而异。