人们非常喜欢flash builder profile工具。但是最近,当我试图找到内存泄漏时,我遇到了一个问题。这是简化的样本。
package
{
import flash.display.Sprite;
import flash.sampler.pauseSampling;
import flash.system.System;
import org.robotlegs.base.ContextBase;
import org.robotlegs.mvcs.Context;
public class MemoryLeak extends Sprite
{
public function MemoryLeak()
{
makeAndDrop();
}
public function makeAndDrop():void{
var _context : Context = new Context(this);
_context = null;
}
}
}
这是一个创建对象然后释放它的简单类。 当我使用配置文件透视图时,它会向我显示“活动对象”。 这是预料之中的,因为我知道GC只有在没有足够内存时才会释放对象。 然后我拍了快照,看到了奇怪的事情: 在我扩展路径之前,它是这样的: 我对上下文对象的持有者感兴趣,所以我扩展它: 那太奇怪了!如你所见,没有任何东西可以引用它。它暗示是一个“GCRoot”。我知道关于gc root的文章,这很简单(我读了20篇关于GC策略的文章,以确保我的理解)。上下文不可能是gc root。而且,这根本不是“一条路”!我希望这是一个配置文件工具的错误,但我确实想要一些解释。 所以请忘记“为什么不收集问题”。我希望有人告诉我为什么配置文件工具说“上下文是gc root”。这是一个bug还是什么? PS:我使用flash builder 4.6和flash debugger 11 sa。