2012-06-05 284 views
2

如果我有对象A,它调用DAO对象B执行一些数据库更新 - 一旦B's函数完成它AA.finishProcess())调用回调函数这并创建内存问题?我的意思是B然后保持在内存中,直到A完成?或者是B仍然使用GC删除?垃圾收集和回调

我问这是因为我正在考虑使用回调函数而不是返回B中的“结果”对象或代码。

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

PS:请忽略特定的,即,它没有提到AsycnTask,它是一种做作的情况,让我的问题在整个:)

干杯任何帮助

回答

1

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

+0

非常感谢我一定会在完成清单时确保清除引用 – wired00

1

当你有DAO对象,你会被注册你的班级为相应的回叫。

只需取消注册回叫,并删除班级中B班的参考。

像下面这样(这里以“b”为B类的对象)。

b.removeListener(this); 
b = null; 

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

0

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

迄今为止,关于内存问题或内存泄漏的最佳文档,标题为IBM,其名称为http://www.ibm.com/developerworks/library/j-leaks/

如果你得到一个数组,列表或任何对象,那么当你可以并且尽快的时候很容易遵守它。正如你所说,我通常会为结果对象投票。