Intereting Posts
Android: setContentView и LayoutInflater Как прослушивать метод ActivityTestRule Android доActivityLaunched в тесте android Разработка Android на Sublime Text 2 GREF увеличивается / уменьшается в многопоточном сервисе (helpl) – что это значит? Не удается использовать telnet localhost 5554 для подключения эмулятора Android Как сохранить позицию ListView при использовании новых API-интерфейсов Loader? Как использовать проводник на корневом устройстве? TCP-сервер RPC (Erlang или что-то подобное?) Для связи с приложениями iOS / Android Как скомпилировать Android AOSP для x86 Android Studio отмечает R красным цветом с сообщением об ошибке «не может разрешить символ R», но сборка завершается успешно Ksoap2: java.lang.IllegalArgumentException: размер <= 0 при создании http.call Безопасен ли поток Android Context? Избегайте косвенных и избыточных вызовов метода Выровненный по правому краю ActionBarDrawerToggle для языков RTL Уведомление FCM: не удалось инициализировать

Почему так много GC_FOR_ALLOC в простом приложении?

Я получаю слишком много GC_FOR_ALLOC от dalvikvm. Я получаю XML из службы REST: в одном упражнении я анализирую около 100 строк программно (меня), а в другом упражнении я использую SimpleXML для разбора около 200 строк.

В первом я получаю 50 GC_FOR_ALLOC. Во втором я получаю как 300! (Я даже не могу опубликовать его, тело составляет 29579 символов, и это разрешено только 30k)

Я искал, и почти все жалуются на gc_for_ «M» alloc, а не gc_for_ «A» lloc.

Является ли SimpleXML проблемой, потому что созданные экземпляры?

Я вывешу logcat dump dalvikvm, возможно, значения имеют некоторую информацию.

Большое спасибо за Вашу помощь.

12-11 06:13:49.564: D/dalvikvm(6759): GC_FOR_ALLOC freed 362K, 13% free 4116K/4688K, paused 181ms, total 182ms 12-11 06:13:50.074: D/dalvikvm(6759): GC_FOR_ALLOC freed 303K, 13% free 4134K/4708K, paused 142ms, total 142ms .... repeated many times ..... 12-11 06:14:06.254: D/dalvikvm(6759): GC_FOR_ALLOC freed 73K, 13% free 4159K/4768K, paused 53ms, total 53ms 12-11 06:14:06.314: D/dalvikvm(6759): GC_FOR_ALLOC freed 103K, 13% free 4159K/4768K, paused 56ms, total 57ms 12-11 06:14:06.374: D/dalvikvm(6759): GC_FOR_ALLOC freed 29K, 12% free 4203K/4768K, paused 54ms, total 54ms 12-11 06:14:06.424: D/dalvikvm(6759): GC_FOR_ALLOC freed 73K, 13% fre 

Вы можете увидеть наиболее недавно выделенные объекты, используя DDMS Allocation Tracker ( документы для отладки памяти , старое сообщение в блоге , ddms docs ). Это покажет вам, что выделяется, и дает вам трассировку стека для места, где выполняется распределение.

Еще одно сообщение в блоге описывает MAT и другие соответствующие инструменты, хотя анализ кучи-дампа менее полезен для такого рода проблем, поскольку он обычно показывает вам объекты, которые еще не были освобождены, и вас больше интересуют объекты, которые освобождаются ,

В Android Dalvik VM GC_FOR_ALLOC запускается на этапе выделения объекта, когда пространство для пространства dlmalloc недостаточно для новых или heap->bytesAllocated + n > hs->softLimit . Вы можете установить dalvik.system.setTargetHeapUtilization ниже для более свободного пространства кучи.

Вы можете использовать учебник MAT MAT

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

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

 for(int i=0; i<list.size(); i++) { for(int j=i+1 j<list.size(); i++) { // I mistyped the iterator of integer j with i // making an infinite loop which triggered the GC. //appears many times } } 

Сегодня я сталкиваюсь с такой же проблемой. Я нахожу замкнутый цикл в моем коде, например while (i <xx), но я не выполняю оператор i ++ в теге while. Так появились сообщения, подобные вам. Сначала проверьте свой код.