人们非常喜欢flash builder profile tool。但是最近,当我试图找到内存泄漏时,我遇到了一个问题。这是简化的示例。
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。更重要的是,这根本不是“1 路径”!我希望这是配置文件工具的错误,但我确实需要一些解释。所以请忘记“为什么不收集问题”。我希望有人告诉我为什么配置文件工具说“上下文是 gc 根”。它是一个错误还是什么?PS:我使用的是 flash builder 4.6 和 flash debugger 11 sa。