Неожиданные кучи для Hello World Android APP
Я изучаю использование памяти с помощью MAT в Eclipse. Хотя я столкнулся с какой-то странной проблемой. Оставьте в стороне тяжелые приложения, я начал с самого доброго приложения "Hello World". Это то, что я получаю как статистика кучи на Nexus 5, время исполнения ART, Lollipop 5.0.1.
ID: 1
Размер кучи: 25.429 МБ
Выделено: 15.257 MB
Бесплатно: 10.172 МБ
% Используется: 60%
# Объекты: 43487
Мой кучей кучи дает мне 3 подозреваемых в утечке памяти:
Обзор
"Нельзя опубликовать круговую диаграмму из-за низкой репутации".
Проблема Подозреваемый 1
Класс "android.content.res.Resources", загруженный ", занимает 10 166 936 (38,00%) байтов. Память накопленный в одном экземпляре" android.util.LongSparseArray [] "загружен по" ".
Ключевые слова android.util.LongSparseArray [] android.content.res.Resources
Проблема Подозреваемый 2
209 экземпляров "android.graphics.NinePatch", загруженные ", занимают 5 679 088 (21,22%) байтов. Эти случаи ссылается на один экземпляр" java.lang.Object [] ", загруженный" " Ключевые слова java.lang.Object [] android.graphics.NinePatch
Проблема Подозреваемый 3
8 экземпляров "java.lang.reflect.ArtMethod []", загруженные "", занимают 3,630,376 (13,57%) байтов. Самые большие экземпляры: • java.lang.reflect.ArtMethod [62114] @0x70b19178 - 1,888,776 (7,06%) байт. • java.lang.reflect.ArtMethod [21798] @0x706f5a78 - 782 800 (2.93%). • java.lang.reflect.ArtMethod [24079] @0x70a9db88 - 546 976 (2.04%) байт. Ключевые слова java.lang.reflect.ArtMethod []
Это все простой код:
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Вопросы
- Почему числа кучи настолько большие.?
Кроме того, в качестве примечания, приложение потребляло 52 МБ оперативной памяти в системе.
- Где находятся эти 209 экземпляров NinePatch? Я просто создал проект, выполнив "Создать новый проект" в Eclipse?
- Первая утечка подозреваемых в ресурсах, она появляется все время в моем анализе приложений. Это действительно подозреваемый?
- Что такое ArtMethod? Нужно ли что-то делать со временем выполнения ART?
Ответы
Ответ 1
В Lollipop стандартная среда исполнения - ART i.e Running Time. который используется вместо времени работы Dalvik, используется в старых версиях Android.
В Kitkat google выпустила экспериментальную версию ART, чтобы получить отзывы от пользователей.
В dalvik используется JIT (только во время компиляции), значит, когда вы открываете приложение, тогда только код dex преобразуется в код объекта.
Но в ART во время установки только код dex преобразуется в код объекта (т.е. AOT перед компиляцией времени). Размер этого объектного кода больше по сравнению с кодом dex, поэтому для АРТ требуется больше оперативной памяти, чем у Dalvik, так как приложение AOT работает быстрее в АРТ, сравнивая Dalvik.
Ответ 2
Вчера я тоже столкнулся с этой проблемой. В ключевом слове журнала "NinePatch". В моем случае причиной была "поддельная" тень - крошечная картинка с альфа-каналом, которая запускает утечку ресурсов. Это стоит около 60 мб утечки памяти для меня.