Почему во время запуска приложения всегда отображается GC_CONCURRENT FREED и GC_CONCURRENT ALLOCATE в Android Logcat?
Я хотел бы знать, почему это сообщение появляется каждый раз при запуске любого приложения.
12-11 17:18:37.141: D/dalvikvm(3155): GC_CONCURRENT freed 485K, 9% free 6696K/7303K, paused 9ms+335ms
paused 9ms+335ms
из-за этой паузы мой звук, который я должен играть, отсутствует, потому что в соответствии с моим кодом он получает звуковые данные каждые 40ms
, поэтому здесь он приостановил на 9ms+335ms
, который является 10 times
потерей данных
Я знаю, что он выполняет какую-то Garbage Collection, но мой вопрос в том, почему она часто встречается в logcat.
Спасибо за любую помощь!!!!!!
Ответы
Ответ 1
Garbage Collection используется Java для предотвращения выхода из памяти путем удаления объектов, которые больше не ссылаются ни на один класс и не могут быть достигнуты из вашего кода.
Если у вас слишком много таких объектов, вы получите много вызовов GC, что может в некоторой степени повлиять на вашу производительность. С другой стороны, с объектами, на которые все время ссылаются, может запретить вызов GC (утечка памяти), и ваша память может заполнить и вы получите OutOfMemoryException
.
Ваша цель состоит не в том, чтобы исключить GC, а в максимально возможной степени уменьшить их в методах, чувствительных к задержке и выполняющихся в потоке пользовательского интерфейса (например, onDraw()
, getView()
,... например).
Ответ 2
Это нормальное поведение для Android. Телефон просто делает сборку мусора.
Для получения дополнительной информации ознакомьтесь с отличным видео в/в Google по этому вопросу:
Google I/O 2011: управление памятью для приложений для Android
Ответ 3
Люди, проверьте эти документы/ссылки, связанные с управлением памятью:
http://static.googleusercontent.com/media/www.google.com/en//events/io/2011/static/presofiles/memory_management_for_android_apps.pdf
http://eclipse.org/mat/
http://therockncoder.blogspot.in/2012/09/fixing-android-memory-leak.html