1

Я создаю приложение для Android, и я только недавно начал изучать использование памяти.Отличие между утечкой памяти и нормальной памятью

Мое приложение состоит из основного вида деятельности и двух фрагментов внутри (фрагмент A содержит recyclerview с изображениями, фрагмент B содержит изображение и некоторые текстовые поля).

Я заметил, что при запуске приложения распределение памяти составляет примерно 20 МБ. Прокручивая вверх и вниз по recyclerview в Fragment A (не загружая никаких новых данных), я могу увеличить использование памяти без остановки (до сбора мусора).

Кроме того, если я перейду от фрагмента A к фрагменту B взад и вперед, я могу увеличить распределение памяти без остановки (до сбора мусора). 20 -> 23 -> 29, и т. Д. До тех пор, пока он не достигнет 60+ и не будет собран мусор.

Если я запустил приложение примерно на 23 МБ и выделил прокрутку и перемещение вперед и назад между фрагментами, мое использование памяти может быть где-то между 40 и 60+ МБ.

Когда я использую Android Studio для сбора мусора несколько раз подряд, я могу вернуть его обратно, но не полностью до 23 (обычно до 30).

Это утечка памяти, так как я не могу собрать мусор 100% памяти, с которой я начал?

ответ

0

Нет, строго говоря, вы не можете иметь такую ​​утечку памяти в java, поскольку это сбор мусора.

Вы получите «утечки» в java, если вы держите ссылку на то, что больше не используете (I.E. большой список или что-то, что вы никогда не удаляете). Но имейте в виду, что они всегда могут быть исправлены путем исключения ссылок на то, что вам не нужно держать (удаление вещей из списков/наборов/карт, закрытие файлов ... и т. Д.). Постоянная память, на которую вы смотрите, вероятно, связана с некоторыми статическими переменными, поскольку они связаны с классами.