Cob*_*yis 2 java methods garbage-collection execution android-view
如果我有一个类删除自己,它的内部方法应该停止执行吗?我有一个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);
}
Run Code Online (Sandbox Code Playgroud)
因此,当我不相信它时,Log.w消息会执行.因此,我担心我正在创建java的内存泄漏.我看了看整个代码,试图找到指针可以抓住B的地方,但除了我想要的东西之外,我什么也没想出来.
那么我问的是,垃圾收集的时间是否与我在结束时删除B的时间不同.如果是这种情况,那么暂时说我实际上没有拿着我不打算持有的物品是安全的吗?
额外的(注意:这可能很难理解,上面的一切都应该足以解决问题):我也用Android-Views标记了这个,因为我在Android上开发:我的B类保存了指向B的View对象监听器.当我删除View时,视图管理器或任何Android应该不再指向View,我相信,当我删除B时,它的所有内部视图也应该被删除,这意味着它们不再能够通过自己的侦听器保存B指针.我只是在说这个,看看我的理解是否正确.
当然不是.
return如果抛出异常,或者线程被中止,则方法将仅"停止执行" .
垃圾收集的全部意义在于它对您来说是不可见的.除非特殊技巧(例如WeakReferences或检查空闲内存),否则无法判断对象是否已被垃圾收集 - 如果您可以检查它是否存在,则表示您有对它的引用,因此无法收集它.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |