假设我创建的一个对象是一些任意类,并且包含在不同类中的多个引用变量中,如下所示:
public void foo(){
Bar bar = someClass.getBar();
bar.doSomething();
}
GC是否添加和删除了条形参考变量?我理解从someclass.getBar()
返回的实际条形对象不会被收集,直到它的所有引用都无法访问,但我不确定条引用变量本身。我的理解是bar引用变量的开销很小。
答案 0 :(得分:4)
变量bar
,其中包含对Bar
的对象实例的引用,不包含在堆中,而是包含在堆栈中。用于此方法调用的堆栈帧已被删除'当方法调用退出时。 变量 bar
不会被垃圾收集;堆栈中的项目永远不会。
对象实例本身在堆上分配;没有参考时会被垃圾收集;如果局部变量持有对象的引用,则该对象不能被垃圾收集;如果方法已退出,则该引用变量不再存在,并且不会计为对象的引用。