Профиль FB говорит "это корень gc", но это кажется неправильным?

Людям очень нравится инструмент профилирования Flash Builder. Но недавно у меня возникла проблема, когда я попытался найти утечку памяти. Вот упрощенный образец.

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, и это довольно просто (я прочитал до 20 статей о стратегии GC, чтобы обеспечить мое понимание). Невозможно, чтобы контекст был корнем gc. И более того, это вовсе не "1 путь"! Я надеюсь, что это ошибка в профиле, но мне нужны некоторые объяснения. Поэтому, пожалуйста, забудьте о "почему бы не собрать вопрос". Я надеюсь, что кто-то скажет мне, почему инструмент профиля говорит "контекст - это корень gc". Это ошибка или что-то? PS: я использую flash builder 4.6 и flash debugger 11 sa.

0 ответов

Другие вопросы по тегам