在下面的示例程序中,在执行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();
}
}
}
答案 0 :(得分:6)
鉴于GC的非确定性,我会说一个与一段字符串长度相同的数字。
答案 1 :(得分:4)
在Thread.sleep
之前,无法知道将收集多少项目。它可能是零,或者它可能是您的整个对象数组,这意味着您将收集三个对象(来自此代码,但可能还有其他代码在您的应用程序中)。
然而,它将是零或三,因为当obj
无根时,它的两个元素(2个新的对象实例)也将被无根,所以它们都将被收集在同一个传递中
然而,很可能你不会在那里看到任何集合,也不会收集任何对象。
答案 2 :(得分:1)
唯一可以确定的方法是衡量它。您可以使用java.lang.ref.Reference。
我最好的猜测是不会有任何垃圾收集,但这可能因JVM到JVM而异。