Как очистить экземпляры FinalizerReference, созданные rajawali LoaderObj.parse()?

Я новичок в раджавали. У меня есть анимация из блендера и 570 кадров, экспортированная в файлы obj и mtl (по 570). Я попытался написать приложение Android rajawali для отображения анимации с помощью объекта LoaderOBj. Я написал цикл для отображения и скрытия каждого объекта по одному. Я обнаружил проблемы с утечкой памяти.

После устранения неполадок с дампом кучи и отслеживанием распределения я обнаружил, что метод parse() в LoaderObj создает множество экземпляров FinalizerReference. В LoaderObj нет метода reset() или эквивалентного метода. Как я могу решить эту утечку памяти или я ошибаюсь, используя цикл для отображения 570 кадров файлов obj/mtl?


person Herman Tse    schedule 12.01.2017    source источник


Ответы (1)


Вы никогда не «очищаете» экземпляры класса FinalizerReference, созданные (косвенно) Раджавали или любым другим способом. Они могут быть удалены системой во время сборки мусора, в которой они играют решающую роль для классов, переопределяющих метод finalize() класса Object.

Вполне вероятно, что FinalizerReference привлек ваше внимание по неправильным причинам. Он часто появляется близко к верхней части дампа кучи из-за ложно большого значения, сообщаемого Android Memory Profiler для его Retained Size. У меня есть исследовал это и обнаружил, что такие большие значения Retained Size связаны с массовым многократным подсчетом Профилировщиком одного и того же небольшого объема памяти.

person HendrikFrans    schedule 15.07.2019