gpt4 book ai didi

java - 垃圾多久收集一次?我认为我的对象没有被删除

转载 作者:行者123 更新时间:2023-12-04 17:17:53 25 4
gpt4 key购买 nike

如果我有一个类 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com