мои 2 цента: я загружаю в упражнение некоторые AnimationDrawables и играю их. Я загружаю, играю, затем устанавливаю фоновый вид изображения на ноль, по одному за раз. Если я прекращаю выполнение задания, а затем быстро возвращаюсь снова, через 3 или 4 раза объем занятой памяти увеличивается слишком сильно, пока я не получу исключение нехватки памяти.
Путем явного вызова сборщика мусора после установки нулевого фона для viewview я вижу в Eclipse logcat, что память остается достаточно свободной - и в моем случае gc фактически запускается - и я больше не прекращаю работать приложение.
Очевидно, что система может решить отложить выполнение gc, но если вы более или менее знаете, как работает gc, вы можете доверять случаю, подобному моему, он будет вызван как можно скорее, потому что система замечает память используется растет и приложение собирается просить больше в систему. Я думаю, что это работает как контейнеры библиотеки c ++ std: вы получаете некоторую начальную память, и каждый раз, когда ее недостаточно, она удваивается.
Сказать, что если вам нужно вызвать его из-за неработающего или плохого кода, это необоснованный догматический способ ответить мне: особенно если вы можете программировать на языке с полным ручным управлением памятью, например, C ++, и вам необходимо соблюдать ограничение ресурсов на мобильном устройстве с таким языком, как java, без возможности освободить память вручную, вы можете быстро вспомнить множество ситуаций, в которых необходимо явно вызывать gc, особенно если у вас есть трассирующий gc, а не счетчик ссылок, код чистый и хорошо сделан.