Форум программистов, компьютерный форум CyberForum.ru

Занятая память. Общие понятия - Android

Восстановить пароль Регистрация
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
26.12.2014, 03:51     Занятая память. Общие понятия #1
Гуру! Вопрос к Вам!
Помогите систематизировать мои знания по памяти устройства!

В новой студии появилась панелька "Memory Monitor" и выдает "странные" графики.

Кто копал по памяти глубоко??? У меня там нечто вроде зигзагов рисуется... "Пила". Растет-растет-растет... С 9ти до 11 и снова парадает на 9. Это нормально? Или должна "в тихом режиме" стоять?

Что это за показатель??? По всему проекту? Включая сервисы?
Что означает "Initiate GS"?

Подключил к программе аларм и неубиваемый сервис (большая нагрузка). Каждые 3-4 часа мобилка начала перегружаться. Хочу поймать кто виноват. Проц вроде в разумных пределах. Прыгает до 25% на срабатывании таймера каждые 15 секунд... Заподозрил утечку памяти... Или/и слишком большое кво больших программ.

Хочу понять какая память вообще бывает! После Win немного запутался...

Что я понял:
1) Каждой программе выделяется память на запуск. По "школьным" терминам ОЗУ - сбрасывается при перезапуске. В моем случае около 11Мб. В пределах которой она работает. Время от времени подчищается сборщиком мусора.
2) Каждой программе выделяется некое пространство на системной флешке. ПЗУ. Это пространство на флешке не доступно другим программам (без рута). Вроде папка удаляется при удалении программы (не проверял). Создается эта папка с именем класса в \data\data\.
3) Обнаружил файл с именем класса программы в \data\local\tmp\
4) Обнаружил apk-файл с именем класса программы в \data\app\
5) Программа похоже где-то хранится и "первоначальном" виде - через тоталкоммандер часто ее можно "изьять". Удаление из 4) не помогает - программа все еще доступна для скачивания. Возможно из ядра, куда она "вкомпиливается".
6) Программа может пользоваться "внешним" носителем/флешкой. Тогда используется та флешка которую "докупили" отдельно - в отдельном "слоте", которую можно вынуть. Обычно НАМНОГО больше встроенной. Как-то данные программы можно перекидывать с внутренней флешки на внешнюю. Это делается в настройках программ. Что при этом реально происходит - не понял! Обьяснете, если можно...
7) Когда программа "устранавливается", она "вкомилируется" в ядро, засоряя некий вообще-недоступный раздел внутренней памяти. Вроде в новых версиях "вкомпиляция" будет еще круче/глубже для ускорения быстродействия (гугл где-то обещал). Но и сейчас (мне обьяснили) подменить файл встроенный в apk ресурсы на другой у уже установленой программы невозможно даже под рутом. Хотя когда учился работать с NDK обнаружил что в папку \data\data\класс иногда попадает библиотека встроенная в apk(возможно глюк отладки).
8) Обнаружил в папке mnt\sdcard два каталога sdcard и sdcard2. Один из них - явно моя внешняя флешка. Вторая? Похоже внутренняя? Но та что внутрення почти пустая!!! Файлов на ней на 4 байта... Или из тотала доступа не хватает чтобы остальное увидеть? Привык что в Win можно temp почистить... Здесь есть аналогии? Ведь есть куча платно/бесплатных программ, которые обещают "почистить" систему... Что они делают? Кроме принудительного отключения сервисов и удаления не важных программ?

Как устроены эти диски внутри - я совсем не понимаю! Сейчас свое устройство довел до состояния, что программу (игру) на 20-30Мб она не может установить - ей "не хватает места". Большая (внешняя) флешка почти пустая. Если удаляю часть программ, тяжелые программы снова ставятся. Не знаю куда смотреть что-бы следить за "занятостью" места для программ. Для себя провел аналогию с диском C: и D: под Windows. На C: ставятся программы ВСЕ, на D: хранятся фильмы, музыка и большие файлы, необходимые программам с диска C:. Не знаю как чистить этот "системный" диск. Кроме обнуления/перепрошивки всего устройства (="переустановить Windows"). В

Используя разные источники добился получения разных размерных "параметров памяти". Их слишком много и они разные! Обычно обозначались в источниках аббревиатурами. Но не удивлюсь, если они не полные или трогают заодно и системную флешку:
1) не знаю! выписываю МОИ данные:
pss = 22.89 Mb
Private=9.99 Mb
Shared=15.72 Mb
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
                            Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
                            Debug.getMemoryInfo(memoryInfo);
                            String memMessage = String.format("Memory (MB): Pss=%.2f, Private=%.2f, Shared=%.2f",
                                memoryInfo.getTotalPss() / 1024.0,
                                memoryInfo.getTotalPrivateDirty() / 1024.0,
                                memoryInfo.getTotalSharedDirty() / 1024.0);

2) не знаю! Подозреваю что связанно с дисками! выписываю МОИ данные:
Tot int: 820,87мб
Av int: 78,5Мб
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
                            File path = Environment.getDataDirectory();
                            StatFs stat = new StatFs(path.getPath());
                                blockSize = stat.getBlockSize();
                                availableBlocks = stat.getAvailableBlocks();
                                totalBlocks = stat.getBlockCount();
                            String memMessage3 = "";
                             //SizeToStr - число в мегабайты
                            memMessage3 += "Tot int: " + uni_Str.SizeToStr(totalBlocks * blockSize, 0) + " ";
                            memMessage3 += "Av int: " + uni_Str.SizeToStr(availableBlocks * blockSize, 0);

3) Тоже не знаю! В таймере не прыгают... Возможно описание ОЗУ устройства...
max: 64Mb
разреш: 48Мб
Кликните здесь для просмотра всего текста
Java
1
2
3
4
                            memMessage2 += "max: " + uni_Str.SizeToStr(Runtime.getRuntime().maxMemory(), 0) + " ";
                            // Возвращаем лимит памяти в мегабайтах
                            int memoryClass = ((ActivityManager) act1.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();
                            memMessage2 += "разрешенная память: " + String.valueOf(memoryClass) + "Mb";

4) А вот эти цифры и рисует по моей программе график от андроид-студии! Те самые:
Mem 86%
used 10.80Mb
tot: 11.38Mb
free: 1.14Mb (цифры таймером прыгали пока набирал)
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
                            Runtime runtime = Runtime.getRuntime();
                            //runtime.gc(); // если разремарить - перестает прыгать в таймере (тоже не понимаю!)
                            String memMessage2 = "";
                            long memoryUsed = runtime.totalMemory() - runtime.freeMemory();
                            memMessage2 += "proc: " + runtime.availableProcessors();
                            int mem_proc = (int)(100 * memoryUsed / runtime.totalMemory());
                            memMessage2 += "Mem: " + mem_proc + "% ";
                            memMessage2 += "used: " + uni_Str.SizeToStr(memoryUsed, 0) + " ";
                            memMessage2 += "tot: " + uni_Str.SizeToStr(Runtime.getRuntime().totalMemory(), 0) + " ";
                            memMessage2 += "free: " + uni_Str.SizeToStr(Runtime.getRuntime().freeMemory(), 0)


ЛЮБАЯ критика приветствуется!!!

Кликните здесь для просмотра всего текста
ps. код выдерал из программ "с мясом" - возможно плохо почистил. И возможно не работает без каких нибудь разрешений...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2014, 03:51     Занятая память. Общие понятия
Посмотрите здесь:

Как очистить память которую использовало Активити, которое уже закрыли? Android
Android Поменять местами внутренюю память и внешнюю
Съёмная память Android
Android Сохранение файла в память телефона
Mbuffer bitmap съедает память Android
Android Сохранение данных с формы в постоянную память телефона
Android Как сохранять значения именно в кэш-память, а не в оперативку?
Android Запись в память телефона из сервиса
Android Запись картинок и файлов во внутреннюю память
Android При загрузке большого количества картинок библиотекой Picasso заканчивается память
Можно ли писать текстовый файл в память телефона в свою подпапку Android
Android Сделать общие экранные кнопки (аналог экранных кнопок назад, домой, меню)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
29.12.2014, 08:18  [ТС]     Занятая память. Общие понятия #2
Так никто ничего дельного добавить и не смог???

Я не линуксоид, но думаю любой линуксоид понимает подобную структуру папок, "дисков" (я до сих пор плохо понимаю принцип mount'a дисков), как вычислить реальную память...

Или никто из гуру сюда еще не заглядывал?

Ну-же! Хоть в 2х словах, как устроена "системная" память в андроиде? Как посмотреть сколько занято? Как узнать сколько из них ОЗУ, а сколько на системной флешке? Сколько разделов на системной флешке и чем они заполняются (я слышал что чуть-ли не три)? Можно ли чистить "темпы" вручную? Сколько памяти ОЗУ в моем телефоне, как она используется, сколько занимает каждая программа, сколько занимает система? Как узнать когда память на исходе (некоторые утилиты с маркета вроде обещают "чистить" на нажатие кнопки)?
Yandex
Объявления
29.12.2014, 08:18     Занятая память. Общие понятия
Ответ Создать тему
Опции темы

Текущее время: 06:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru