Увеличение родной памяти

У меня есть вопрос, потому что не могу найти ничего относительного в документации Android.

Когда я запускаю простое приложение (стандартный проект из студии Android или приложение-пример Google) в Android Studio, я проверяю исходную собственную память. Допустим, его 17 мб. Если я изменю ориентацию пару раз, то родная память уйдет в 40 Мб, а если принудительно установить GC, память упадет до 23-25. Если я сделаю это пару раз, после GC память останется на 23-25. Так откуда же взялись эти лишние МБ?

Нет утечки памяти, конечно, потому что я проверил это и потому что родная память продолжала расти.

Андроид держит какой нибудь кеш?

Также, если в приложении я использую библиотеки ex retrofit2, glide и т. Д., Родная память будет увеличена, но в пределах +20 Мб от исходной родной памяти.

LogHeap:

 Log.d("tag", "debug. =================================");
                Log.d("tag", "debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free)");
                Log.d("tag", "debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory() / 1048576.0)) + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory() / 1048576.0)) + "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory() / 1048576.0)) + "MB free)");

1 ответ

Решение

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

Классы (байт-код) загружаются по требованию, но никогда не выгружаются. Поэтому, когда ваше приложение запускается, вы, вероятно, еще не загрузили все классы, а просто необходимый минимум для запуска. Чем больше приложение используется, тем больше классов будет загружено, пока у вас их нет.

Другие вопросы по тегам