有多少个对象可以进行垃圾回收?

时间:2016-05-16 09:07:25

标签: java garbage-collection

所以我最近去过面试,并被问到以下问题。 (实际上这只是一个测试写作,所以我不能问任何问题)

在main方法结束时,有多少对象可以进行垃圾回收?

function removeNoise(str) {
  var base = "%$&/#·@|º\ª";
  var arr = str.split('');

  for(var i = arr.length - 1; i <= 0 ; i--) {
    var item = arr[i];
    if(base.indexOf(item) >= 0) {
      //remove the offending character
      arr.splice(i,1); 
    }
  }
  return arr.join(''); 
}

removeNoise('he%$&/#·@|º\ª\llo'); //=> $/·|ªllo

(A)0

(B)1

(C)5

我知道它是0,因为至少有一个对象(public class Main { public static void main(String[] args) { Object obj; for (int i = 0; i < 5; i++) { obj = new Object(); } obj = null; } } )将被垃圾收集,但我也知道obj不是真正的对象,它只是对它的引用。所以我的回答是5.

这是对的吗?如果没有,那么为什么?

2 个答案:

答案 0 :(得分:6)

您的回答5 is correct

这里通过for循环创建了总共5个对象,所有这些对象都可以在方法结束时进行垃圾回收。

答案 1 :(得分:4)

可能 0

编译器可能会进行一些优化并消除整个循环,并避免首先创建在循环中创建的五个对象。

因此,如果没有进行编译器优化,则在循环内创建5个对象,并且在变量obj中覆盖它们的引用,在末尾变量将引用分配给{{的最后一个对象。 1}}。