-
Title:
04-04 Memory_Leaks
-
Description:
-
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.