如果我有一个类 self 删除,它的内部方法是否应该停止执行?我有一个 B 类,它告诉 A 类从 A 的 ArrayList 中删除 B。我相当确定 B 只存在于 A 的 ArrayList 中,所以当我删除它时,它应该被删除,对吗? (注意:我已经包含了一个 Serializable 实现,以防万一它与 VM 处理我的类的方式有任何关系,但我没有在此处写入 read- 和 writeObject 方法。我怀疑它与不过这个问题。)
public class A implements Serializable, B_Listener {
ArrayList<B> bArray;
public A() {
bArray = new ArrayList<SomeObject>();
bArray.add(new B(bArray.size(), this));
}
@Override
public void deleteAtIndex(int index) {
bArray.remove(index);
}
}
public class B implements Serializable {
B_Listener listener;
int index;
public B(B_Listener listener, int index) {
this.listener = listener;
this.index = index;
}
//This is called at some point in a B's lifetime.
private void selfDestruct() {
listener.deleteAtIndex(index);
Log.w("B.class", "Should this not output? It does.");
}
}
public interface B_Listener {
public void deleteAtIndex(int index);
}
所以 Log.w 消息在我认为不应该执行时执行。因此,恐怕我正在造成 java 的内存泄漏。我查看并查看了我的代码,试图找到 B 可能被指针保存的位置,但除了我想要的之外,我一无所获。
那么我想问的是垃圾收集的时间是否与我删除 B 的时间不同。如果是这种情况,那么暂时可以肯定地说我实际上没有持有我不打算持有的元素吗?
额外(注意:这可能很难理解,上面的所有内容都应该足以解决问题): 我也用 Android-Views 标记了这个,因为我在 Android 上开发:我的 B 类包含指向 B 作为监听器的 View 对象。当我删除 View 时, View 管理器或任何 Android 都不应再指向 View ,我相信,当我删除 B 时,它的所有内部 View 也应被删除,这意味着它们不能再通过自己的监听器保持 B 的存在指针。我只是把这个说出来,看看我在这里的理解是否正确。
最佳答案
当然不是。
只有当方法返回
、抛出异常或线程被中止时,它才会“停止执行”。
垃圾回收的全部意义在于它对您是不可见的。除非使用特殊技巧(例如 WeakReferences,或检查空闲内存),否则无法判断一个对象是否已被垃圾回收——如果您可以检查它是否存在,则意味着您有对它的引用,所以它 无法收集。
关于java - 垃圾多久收集一次?我认为我的对象没有被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11926966/