Взагалі, ви не повинні викликати GC явно за допомогою System.gc (). Існує навіть лекція з IO ( http://www.youtube.com/watch?v=_CruQY55HOk ), де вони пояснюють, що означає журнал пауз GC і в якому вони також заявляють, що ніколи не викликають System.gc (), оскільки Далвік знає краще ніж ти, коли це робити.
З іншого боку, як згадувалося вище, відповіді вже на процес GC в Android (як і в усьому іншому) іноді бувають помилки. Це означає, що алгоритми Dalvik GC не нарівні з хотспотом або JRockit JVM, а в деяких випадках можуть вийти з ладу. Один із таких випадків - при розподілі растрових об'єктів. Цей складний, оскільки він використовує пам'ять Heap та Non Heap і тому, що одного вільного екземпляра об'єкта растрових зображень на пристрої з обмеженою пам’яттю достатньо, щоб отримати виняток OutOfMemory. Тому називати його після того, як вам більше не потрібна ця растрова карта, як правило, пропонується багатьма розробниками, і деякі люди навіть вважають хорошою практикою.
Кращою практикою є використання .recycle () у растровій карті, оскільки саме для цього створено цей метод, оскільки він позначає рідну пам'ять растрової карти як безпечну для видалення. Майте на увазі, що це дуже залежить від версії, тобто, як правило, це потрібно для старих версій Android (я думаю, що передує 3.0), але на пізніших версіях не потрібно. Крім того, це не зашкодить, використовуючи його на новіших версіях ефіру (просто не робіть цього в циклі чи щось подібне). Новий час виконання ART тут сильно змінився, оскільки вони запровадили спеціальний «розділ» для великих об'єктів, але я думаю, що це не завадить зробити це з ефіром ART.
Також одна дуже важлива примітка про System.gc (). Цей метод не є командою, на яку Далвік (або JVM) зобов'язаний відповідати. Розгляньте це більше, як сказати віртуальній машині "Не могли б ви зробити сміття, якщо це не клопоту".