实例变量堆还是栈? (有具体例子)
Instance variable heap or stack ? ( with specific example)
使用以下代码:
public class Main {
public static void main(String args[]) {
A objectA = new A();
objectA.deleteB();
}
}
public class A {
private B objectB;
public A() {
this.objectB = new B();
}
public void deleteB() {
this.objectB = null;
}
}
public class B {
public B() {}
}
堆栈中的第一帧用于 main()
堆栈中的局部变量 objectA 包含对堆中真实对象 A 的引用,而在堆中的对象 A 中,我们有一个引用对象 B,指向堆中的真实对象 B。
问题是针对栈中的第二帧deleteB()
在我做的方法中:this.objectB = null;
在记忆中是什么意思?
表示objectA
的objectB
字段不再引用任何东西。如果它之前引用的对象(在堆上)没有在其他任何地方引用(并且它不在您发布的代码中),它将被垃圾收集。这意味着它在堆上占用的内存将被释放,并可用于其他对象。
使用以下代码:
public class Main {
public static void main(String args[]) {
A objectA = new A();
objectA.deleteB();
}
}
public class A {
private B objectB;
public A() {
this.objectB = new B();
}
public void deleteB() {
this.objectB = null;
}
}
public class B {
public B() {}
}
堆栈中的第一帧用于 main()
堆栈中的局部变量 objectA 包含对堆中真实对象 A 的引用,而在堆中的对象 A 中,我们有一个引用对象 B,指向堆中的真实对象 B。
问题是针对栈中的第二帧deleteB()
在我做的方法中:this.objectB = null;
在记忆中是什么意思?
表示objectA
的objectB
字段不再引用任何东西。如果它之前引用的对象(在堆上)没有在其他任何地方引用(并且它不在您发布的代码中),它将被垃圾收集。这意味着它在堆上占用的内存将被释放,并可用于其他对象。