Почему во время запуска приложения всегда отображается 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(),... например).