Android самый низкий объем памяти - PullRequest
2 голосов
/ 06 мая 2011

Я отлаживал свое приложение и проверял распределение памяти и наткнулся, что я думаю, на любопытную вещь.Часто задают вопрос, как лучше всего управлять памятью и т. Д., Мой вопрос: какова самая низкая граница памяти по умолчанию в простом приложении?Поэтому я пошел и создал простой проект hello world для API уровня 8 (2.2), в котором просто написано Hello World.

Затем я посмотрел DDMS на вкладке Heap.Выделено было 2 318 МБ, 510 КБ бесплатно (использовано 82%).Поэтому я подумал, почему он использует 82% разрешенной (?) Кучи в простом тесте Hello World.Копая глубже, я сделал кучу дампов и пробежал через MAT в затмении.В качестве первого примера я посмотрел на dominator_tree (все объекты отсортированы по размеру), вот что я нашел:

  1. TrustManagerImpl (176.616 Retained Heap) - 9,83% - я думаю, это важнодля обеспечения безопасности

  2. com.ibm.icu4jni.util.Resources $ DefaultTimeZones (165.432 Сохраненная куча) - 9,21% - ПОЧЕМУ?Я посмотрел на его содержание, и это один массив String с 561 членом, каждый из которых является информацией о часовом поясе?Мне это не нужно, правда?И это занимает 10% кучи.

  3. android.text.Html $ HtmlParser (126.592 Reserved Heap) - 7,05% - я полагаю, это HTML-анализатор для моего TextView с Hello World,Опять же почему?Я не разбираю HTML, так почему же Парсер там?На самом деле HTMLSchema - это то, что занимает 99,9% объекта.

Существует больше, но менее значимое, как я вижу (что может быть неправильно).У кого-нибудь есть мысли по поводу 3 случаев, которые я упомянул выше?Я имею в виду, я скучаю по интерпретации чего-то здесь?Я не думаю, что использование памяти должно быть таким высоким.Вопрос, который напрашивается сам собой, если у каждого приложения есть этот базовый уровень, как он масштабируется?Наверное, не очень хорошо?Должно ли это быть исправлено, и, следовательно, привести к улучшению управления памятью в Android?Я запустил это на HTC Desire 2.2.

Alex

1 Ответ

2 голосов
/ 06 мая 2011

Выделено 2 318 МБ, 510 КБ свободного (использовано 82%).Поэтому я подумал, почему в простом тесте Hello World используется 82% разрешенной (?) Кучи.

Помните, что доступная куча будет варьироваться от 16 до 32 МБ (или, возможно, выше)в зависимости от устройства.

Мне это не нужно?,Предварительная загрузка этой информации устраняет ненужные паузы во время работы приложения.Более того, это не более 0,1% вашей кучи.

Я не анализирую HTML, так почему же здесь парсер?

Предположительно по тем же причинамВ настоящее время предварительно загружены часовые пояса, торгуя немного оперативной памяти, чтобы сэкономить время процессора во время выполнения.Это также составляет менее 0,1% вашей кучи.

Я не думаю, что использование памяти должно быть таким высоким.

Добро пожаловать на ваш взгляд.Я думаю, что вы потратили несколько часов своей жизни, которые могли бы быть лучше потрачены на оптимизацию кода.Одно растровое изображение может использовать значительно больше оперативной памяти, чем любая из этих конструкций, которые вы считаете настолько вопиющими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...