Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

26.12.2014, 03:51. Просмотров 583. Ответов 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. код выдерал из программ "с мясом" - возможно плохо почистил. И возможно не работает без каких нибудь разрешений...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2014, 03:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Занятая память. Общие понятия (Программирование Android):

Разработка мобильного приложения (общие аспекты) - Программирование
Здравствуйте, уважаемые спецы. Я учусь в универе и стараюсь сам развивать свои знания, так как в универе как и на любой учебе дают...

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

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

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

Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше? - Java SE
Доброго времени суток товарищи Столкнулся с такой ситуацией: куда двигаться дальше? Основы Java освоены, понятия, парадигмы, ООП....

Занятая процессом озу. WS Private Bytes - Delphi WinAPI
Всем привет. Озадачился для программы поиском чего то, что даст мне именно Private Bytes, т.к. Мне нужна сортировка именно по привычному...

1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
29.12.2014, 08:18  [ТС] #2
Так никто ничего дельного добавить и не смог???

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

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

Ну-же! Хоть в 2х словах, как устроена "системная" память в андроиде? Как посмотреть сколько занято? Как узнать сколько из них ОЗУ, а сколько на системной флешке? Сколько разделов на системной флешке и чем они заполняются (я слышал что чуть-ли не три)? Можно ли чистить "темпы" вручную? Сколько памяти ОЗУ в моем телефоне, как она используется, сколько занимает каждая программа, сколько занимает система? Как узнать когда память на исходе (некоторые утилиты с маркета вроде обещают "чистить" на нажатие кнопки)?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2014, 08:18
Привет! Вот еще темы с ответами:

Как рассчитать средние общие издержки, общие издержки, доход, прибыл предприятия? - Экономика
Фирма производит 10 единиц продукции. Средние постоянные издержки равны 25 у. е., средние переменные – 35 у. е. Цена единицы продукции – 70...

Рассчитать общие, предельные, средние постоянные, средние переменные и средние общие затраты предприятия - Экономика
Задание 6. Рассчитать общие, предельные, средние постоянные, средние переменные и средние общие затраты предприятия, если известно, что...

.NET 4.x Основые понятия VB - Visual Basic .NET
Читая учебники о VB.NET я не совсем понимал, о чём в них говориться. И вот я здесь и прошу у вас помощи. Можете ли вы мне дать все...

Перевод понятия - Программирование
Доброго времени суток. Не то, чтобы именно теория программирования, но лучшего раздела не придумал. Перевожу часть статьи по...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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