正如我所知,从规范(和标准的非android)java中,如果一个对象只有"弱引用",也就是说,只有弱引用才能访问-它将在下次运行时被垃圾收集收集。
在我的安卓应用程序中,出于某种原因,情况并非如此。
每次创建一个相当重的对象(Activity)时,它都会留在堆中,但当我执行堆转储并在Eclipse内存分析器中检查它时,我发现该对象仍然留在堆中,即使它只是被弱引用(如在到GC根的合并路径选项中所示)
当我明确地清除弱引用时,对象就会被清除。
我在安卓2.3.3上运行我的应用程序。它看起来像是某种平台错误。
我是不是错过了什么?其他人遇到过这个问题吗?
谢谢,Yoav
它将在下次运行时被垃圾收集收集
不,没有这样的保证。它可以被收集。(这适用于所有对象,无论引用类型如何,这就是为什么您经常读到一个对象变得"符合收集条件"的原因。)