Una de las mejores cosas
del lenguaje Java de Android
es que es un ambiente
de memoria administrada
es decir, no hay que ser súper cuidadoso
con la creación o destrucción de objetos.
Si bien esto es genial,
hay algunos problemas de desempeño
acechando bajo la superficie.
Recuerda que las pilas de memoria
en los tiempos de ejecución de Android
están segmentadas en espacios
basado en el tipo de asignación
y en cómo el sistema organiza mejor
las asignaciones para eventos GC futuros.
Y cada espacio tiene su propio
tamaño de memoria reservada.
Cuando el tamaño combinado
de un objeto en un espacio
se acerca al límite máximo
se inicia un recolector de basura
para liberar espacio y eliminar
objetos innecesarios.
Éstos eventos GC generalmente no son
un problema de desempeño perceptible.
Pero, muchos de ellos
ocurriendo una y otra vez
pueden terminar consumiendo
todo tu tiempo de recuadro.
Mientras más tiempo pasas con los GC
menos tiempo tendrás para otras cosas,
como renderizar o transmitir audio.
Una situación común en la cual
caen muchos desarrolladores, que causa
que causa que ocurran GC
se conoce como fuga de memoria.
Las fugas de memoria son objetos
que la aplicación ya no utiliza
pero que el recolector de basura
no reconoce como "sin utilizar".
El resultado es que permanecen
residiendo en la pila,
ocupando espacio valioso
que no se libera para otros objetos.
A medida que se fuga memoria,
el espacio disponible en la generación
de la pila va disminuyendo
más y más, lo que implica que habrá
más GC ejecutándose con más frecuencia
para tratar de liberar espacio para
ejecutar normalmente los programas.
El encontrar y reparar fugas de memoria
es cosa complicada.
Algunas fugas se crean fácilmente,
como al hacer referencias circulares
a objetos que el programa no utiliza.
Mientras que otros no son tan simples,
como el mantener objetos cargadores
de clase mientras se cargan.
En todo caso, una aplicación rápida
y que se ejecuta con fluidez
debe estar consciente y ser sensible
ante posibles de memoria.
Porque tu código se va a ejecutar
en un universo de dispositivos
de diferentes tipos
y no todos van a tener el mismo tamaño
y consumo de memoria.
Por suerte, hay una sencilla herramienta
que nos ayudará a detectar
si existen fugas, dentro del kit SDK
de Android.
Veamos.