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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

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

26.12.2014, 03:51. Просмотров 530. Ответов 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.developer http://developer.android.com/intl/ru/guide/topics/data/data-storage.html#filesExternal It's possible that a...

Mbuffer bitmap съедает память - Программирование Android
Приветствую, Есть маленькое приложение блокнот - ListActivity на основе BaseAdapter, читающего данные из файла, плюс еще пара activity с...

Сохранение файла в память телефона - Программирование Android
пытаюсь сохранить файл на память телефона но никак не получается File file = new File("temp.log") мб путь неправильный?

Запись в память телефона из сервиса - Программирование Android
Нужно через сервис сохранить файл в память телефона в директорию. Делаю так: if...

Запись картинок и файлов во внутреннюю память - Программирование Android
Здравствуйте! Загружаю информацию через Jsoup в AsyncTask. Думаю сохранять её в файлы(что то вроде кэша). Уже имел дело с этим, но как...

Поменять местами внутренюю память и внешнюю - Программирование Android
Чтото непонятной творится)) Когда я захожу в проводник то sdcard -это внешняя, mnt/sdcard тоже, но телефон всё равно устанавливается всё во...

Сохранение данных с формы в постоянную память телефона - Программирование Android
как мне сделать чтобы информацию с формы ui сохраняла не в оперативную память а просто в память телефона чтобы при закрытия приложения...

Как сохранять значения именно в кэш-память, а не в оперативку? - Программирование Android
Как сохранять значения именнов кэш память а не в оперативку?? Какие есть инструменты (классы Java) для работы с кэшем в android??

Память занятая текстом - Delphi
Edit1.Text:=(Length(s)*SizeOf(Char)/1024/1024).ToString;вывдет ли мне это настоящее к-во памяти занятое string?

Осталась занятая память после удаления VirtualBox - Windows 7
Добрый вечер, недавно я "игрался" с VirtualBox. Но пред удалением я забыл удалить виртуальную машину на которую выделялось 15 гигов памяти....

Нужна логика программы,общие понятия ,переменные - C++
Нужна программа учет оценок студентов на с++ Должно быть Окно в нем поля допустим: Реферат 90 баллов Контрольная 50 баллов Модуль...


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

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

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

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

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

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