Подтвердить что ты не робот

Неожиданные кучи для 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?
4b9b3361

Ответ 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 мб утечки памяти для меня.