Я борюсь с некоторыми концепциями сбора/выделения мусора в Java. Я буду использовать приведенный ниже пример, чтобы проиллюстрировать мое недоразумение.Понимание сборки мусора в java
У меня есть приложение для Android, где я собираю данные от датчиков и сохраняю значения в массиве, который никогда не превышает N выборок. Используя Android Studio, я могу смотреть живой просмотр Free vs Allocated memory. Когда мое приложение запускается, я могу наблюдать, как выделенная память медленно увеличивается (и уменьшается свободная память). Когда свободная память приближается к 0, система запускает сборку мусора, и я вижу значительное выделение памяти. Иногда, когда свободная память приближается к 0, система будет делать сборку мусора, которая увеличит выделенную память, но также увеличит издержки памяти.
1) Если выделенная память падает до «исходных уровней», когда выполняется сбор мусора, это означает, что у меня нет утечки памяти? Я понимаю, что утечка памяти означает, что сбор мусора не сможет освободить выделенную память.
2) Увеличивает ли тот факт, что выделенная память продолжает расти, даже если размер массива ограничен N образцами, что указывает на то, что я делаю ненужное выделение в своем приложении? Когда массив попадает в N выборок, я делаю array.remove (0) до выполнения array.add(). Я бы подумал, что после того, как N выборок будет в массиве, выделенная память не будет продолжать увеличиваться.
Чтобы узнать, что именно выделяется, попробуйте https://developer.android.com/tools/performance/allocation-tracker/index.html. – fadden