Я пытаюсь найти утечки памяти в довольно большом приложении Flex, и я устал от использования ничтожных инструментов, которые предоставляет Flash Builder.Можно ли отслеживать ссылки между объектами во Flash, так же, как и профилировщик Flash Builder?
В частности, я хочу проанализировать отношения объектов в памяти, используя ту же информацию, к которой имеют доступ инструменты инструмента Flash Builder. То есть какие объекты находятся в памяти и на каких объектах они ссылаются, и имеют ссылки на них. Учитывая эту информацию, я хочу построить ориентированный граф, узлы которого являются живыми объектами, а ребра - ссылками от одного объекта к другому. Оттуда я хочу найти dominators, что должно быть хорошим показателем того, какие объекты протекают.
Я считаю, что Eclipse делает что-то похожее на Java.
К сожалению, Flash Builder позволяет экспортировать только полученные данные профилирования в двоичную форму, которая только обрабатывается Flash Builder. Вместо того, чтобы пытаться перепроектировать их вывод, я решил попытаться захватить данные самостоятельно, так как они делают свой API профилирования доступным в пакете flash.sampler.*.
До сих пор мне удалось собрать объекты, которые в настоящее время живут в памяти, получить их трассировки выделения и ссылки на объекты, которые я могу проверить, и это самое то, что мне нужно. Но я не могу понять, как профилировщик FB отслеживает обратные ссылки на корень GC. Единственный способ, которым я могу это сделать, - проверить каждый объект в памяти и каждый объект проверить каждый из его свойств и т. Д., Пока не найду цепочку для объекта, классифицированного как «корневой» уровень. Но поскольку я могу только следовать рекомендациям по общедоступным свойствам, вполне возможно, что я пропущу множество ссылок, которые предотвращают сбор мусора.
Как работает профилировщик Flash Builder?
Мое подозрение заключается в том, что он не просто использует сэмплер. * API для сбора информации, но дополняет это запросами, выполняемыми через соединение отладчика, что, вероятно, не подходит для моей работы. Но в отсутствие какого-либо способа проверить это, я надеюсь, что это возможно, используя только API-интерфейс Sampler.
Спасибо, Майк, я действительно хорошо знаю, как работает инструмент loitering objects. Я все еще считаю это ничтожным инструментом, потому что он даст мне цепочки объектов, сохраняющих какой-либо экземпляр одного целевого объекта, - и в любом нетривиальном приложении их будет много - но не выполняйте никакого дальнейшего анализа. Если у меня есть 1000 законных цепей объектов и 1, которые не должны быть там, мне бы очень хотелось узнать об этом, и один из способов сделать это - проанализировать ссылки на объекты памяти в доминантах. –