【发布时间】:2015-02-11 06:15:10
【问题描述】:
这可能是一个愚蠢的问题,但我对垃圾收集知之甚少。 当我查找有关它的信息时,很明显,使对象无效会设置它 引用计数为 0,因此它可以进行垃圾回收
所以我想对其进行测试并制作了一个片段,它使用了大约 5 MB 的内存。 当我使用事务管理器删除片段,使片段无效并显式调用垃圾收集器(GC.collect())时,分配的内存保持不变,我没有得到 5 MB 回来..
这可能是什么原因?
public void Unselect()
{
var ft = this.SupportFragmentManager.BeginTransaction ();
switch (selected)
{
case 8:...
case 9:
//FindViewById (Resource.Id.fragment_container).SetBackgroundDrawable (null);
ft.Hide (carFragment);
ft.Remove (carFragment);
Console.WriteLine ("NULLIFY");
carFragment = null;
break;
case 10:...
}
ft.Commit ();
carFragment 是一个片段,其中包含 Google Maps V2 支持片段
【问题讨论】:
-
nullifying an object sets it's reference count to 0。不,它会减少计数器,因为该引用不再存在,但可能有其他引用保留该对象。在您的记忆中还有对象中使用的类,它们是延迟加载的,不会从内存中删除。您可能正在查看内存泄漏 -
在此处添加一些代码来演示该问题。垃圾收集的细节很重要。
标签: java android collections fragment garbage