FB Profile说“这是一个gc root”,但似乎错了?

时间:2012-12-22 06:46:39

标签: flash garbage-collection flash-builder flashplayer-debug

人们非常喜欢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;
        }
    }
}

这是一个创建对象然后释放它的简单类。 当我使用配置文件透视图时,它会向我显示“活动对象”。 enter image description here 这是预料之中的,因为我知道GC只有在没有足够内存时才会释放对象。 然后我拍了快照,看到了奇怪的事情: 在我扩展路径之前,它是这样的: enter image description here 我对上下文对象的持有者感兴趣,所以我扩展它: enter image description here 那太奇怪了!如你所见,没有任何东西可以引用它。它暗示是一个“GCRoot”。我知道关于gc root的文章,这很简单(我读了20篇关于GC策略的文章,以确保我的理解)。上下文不可能是gc root。而且,这根本不是“一条路”!我希望这是一个配置文件工具的错误,但我确实想要一些解释。 所以请忘记“为什么不收集问题”。我希望有人告诉我为什么配置文件工具说“上下文是gc root”。这是一个bug还是什么? PS:我使用flash builder 4.6和flash debugger 11 sa。

0 个答案:

没有答案