-
Title:
04-04 Memory_Leaks
-
Description:
-
Одной из лучших черт языка Java в Android
является то, что эта среда
-
cама управляет памятью,
и вам не нужно следить за тем,
-
когда объекты создаются или уничтожаются.
-
Однако, хотя это всё и хорошо,
-
есть скрытые проблемы производительности,
которые скрываются под поверхностью.
-
Теперь запомните, динамическая память
в среде выполнения Android
-
разделена на пространства
на основе типа выделения и того,
-
как система сможет организовать выделения
памяти для событий СМ наилучшим образом.
-
Каждое такое пространство обладает
своим зарезервированным объёмом памяти.
-
Когда общий размер объекта в пространстве
приближается к верхнему пределу,
-
запускается событие сборки мусора,
чтобы освободить пространство
-
и удалить ненужные объекты.
-
Такие события СМ обычно не влияют на
производительность вашей системы.
-
Однако, когда много таких событий
запускается снова и снова,
-
это может быстро снизить
частоту смены кадров.
-
Чем больше времени тратится на СМ,
-
тем меньше его остаётся на другие задачи,
вроде отрисовки или трансляции аудио.
-
Одной из таких обычных ситуаций,
с которой сталкиваются разработчики
-
при инициации множества событий СМ,
является утечка памяти.
-
Утечки памяти — это объекты,
которые приложение больше не использует,
-
однако сборщик мусора не может распознать
их как неиспользуемые.
-
В результате
они остаются в памяти постоянно,
-
занимая ценное пространство, которое
не освобождается для других объектов.
-
По мере роста утечки памяти
-
доступное пространство в поколениях памяти
будет становиться всё меньше,
-
что приведёт к тому,
что события СМ будут запускаться всё чаще,
-
пытаясь высвободить пространство для
нормальной работы программы.
-
Задача поиска и устранения утечек
довольно не проста.
-
Некоторые утечки очень легко создать,
-
например, создавая циклические ссылки
на неиспользуемые программой объекты.
-
Другие утечки не так просты,
-
вроде удержания дескрипторов на объектах
загрузки классов в процессе их загрузки.
-
В любом случае, стабильно работающее
быстрое приложение должно следить
-
и определять возможности возникновения
утечек памяти.
-
Я хочу сказать,
что ваша программа будет работать
-
на множестве разных устройств,
-
и не все они будут иметь те же
объёмы и параметры памяти.
-
К счастью, в самом пакете Android SDK
имеется простой инструмент,
-
помогающий нам понять,
где могут возникать утечки.
-
Давайте рассмотрим его.