垃圾收集和回调

时间:2012-06-05 06:55:19

标签: java android callback garbage-collection

如果我有对象A,它调用DAO对象B来执行某些数据库更新 - 一旦B's函数完成,它就会调用A中的回调函数({ {1}})这会造成内存问题吗?我的意思是A.finishProcess()会在B完成之前保留在内存中吗?还是A仍然被GC删除了?

我问这个是因为我正在考虑使用回叫而不是从B返回“结果”对象或代码。

简而言之,是否更好地设计(和内存使用)“返回”结果对象而不是使用对调用对象的回调?

PS:请忽略具体的,即它没有提到B,这是一个人为的问题,可以解决我的问题:)

为任何帮助干杯

3 个答案:

答案 0 :(得分:1)

当您拥有DAO对象时,您将为相应的回拨注册您的课程。

只需取消注册回拨并删除班级中B类的参考资料。

如下所示(此处以“b”为B类对象)。

b.removeListener(this);
b = null;

这将告诉JVM B类不再存在引用,GC将从内存中清除它。

答案 1 :(得分:1)

关于参考文献。只要您不存储/保留任何(强)引用(即正确注销,在对象不再使用时清除引用等),您不必担心因为对象将被正确处理GC

答案 2 :(得分:0)

我认为你使用回调会导致内存使用问题。如果没有,我已经感到困惑。如果您提供代码,我们将更容易理解您的想法。

到目前为止,我读到的关于内存问题或内存泄漏的最佳文档,由IBM标题为http://www.ibm.com/developerworks/library/j-leaks/

如果你得到一个数组,列表或其他东西的对象,那么很快你就可以尽可能地顺从它。我通常会投票给结果对象,就像你所说的那样。

相关问题