Sigo escuchando que las aplicaciones de Android deben tratar de limitar el número de objetos creados para reducir la carga de trabajo en el recolector de basura. Tiene sentido que no desee crear números masivos de objetos para rastrear en una huella de memoria limitada, por ejemplo, en una aplicación de servidor tradicional crear 100.000 objetos en pocos segundos no sería desconocida.Cambiando el estilo de codificación debido al rendimiento del Android GC, ¿qué tan lejos está demasiado lejos?
El problema es ¿cuánto debo tomar esto? He visto toneladas de ejemplos de aplicaciones de Android que dependen del estado estático para supuestamente "acelerar las cosas". ¿Aumenta realmente la cantidad de instancias que deben ser recolectadas de basura de decenas a cientos? Me imagino cambiando mi estilo de codificación para crear ahora cientos de miles de objetos como los que podría tener en un servidor Java-EE completo pero depender de un montón de estado estático para (supuestamente) reducir la cantidad de objetos que se recolectan como basura parece impar.
¿Cuánto es realmente necesario cambiar su estilo de codificación para crear aplicaciones de rendimiento de Android?
También agregaría que a menudo encontrará que el código Java que fue escrito originalmente para computadoras de escritorio o servidores es extremadamente ineficiente y se moverá a través de una tonelada de objetos en comparación con la cantidad de trabajo que hace. Por ejemplo, he visto código de red que está causando continuamente GC mientras procesa datos de la red. Si su código está haciendo esto, realmente debería considerar optimizarlo, no específicamente debido a Dalvik, sino porque no es apropiado para un dispositivo móvil: todo ese trabajo extra proviene directamente de la batería. – hackbod
En cuanto a cuánto debe cambiarse realmente el estilo, diría que la mejor manera de hacerlo es escribir un código que funcione (y pensar un poco en la reutilización de objetos asignados, aunque nada extenso) y ver si hay cualquier presión sobre el GC. Si lo hay, inicie la creación de perfiles de memoria de su código y busque lugares donde pueda evitar la asignación y eliminación de variables. –