Android WeakReference的行为不符合预期

时间:2012-07-25 06:56:50

标签: java android weak-references

据我所知,从规范(和标准的非机器人)java,如果一个对象只是“弱引用”,也就是说,只能通过弱引用来访问 - 它是下次运行时由垃圾收集器收集。

在我的Android应用程序中,出于某种原因,情况并非如此。

一个非常繁重的对象(Activity)每次创建时都会保留在堆中,但是当我执行堆转储并在Eclipse Memory Analyzer中检查它时,我看到对象仍然在堆中,即使它是只有弱引用(在GC根选项的合并路径中可以看到)

当我明确清除弱引用时,对象被清除。

我在Android 2.3.3上运行我的应用程序。它看起来像某种平台错误。

我错过了什么吗? 还有其他人遇到过这个问题吗?

谢谢, 约阿夫

1 个答案:

答案 0 :(得分:0)

  

在下次运行时由垃圾收集器收集。

不,没有这样的保证。它可以收集。 (这适用于所有对象,无论引用类型如何,这就是您经常读取对象变为“符合条件进行收集”的原因。)