[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.28,0:00:04.31,Default,,0000,0000,0000,,Una de las mejores cosas\Ndel lenguaje Java de Android Dialogue: 0,0:00:04.31,0:00:08.47,Default,,0000,0000,0000,,es que es un ambiente\Nde memoria administrada Dialogue: 0,0:00:08.47,0:00:11.75,Default,,0000,0000,0000,,es decir, no hay que ser súper cuidadoso\Ncon la creación o destrucción de objetos. Dialogue: 0,0:00:11.75,0:00:12.68,Default,,0000,0000,0000,,Si bien esto es genial, Dialogue: 0,0:00:12.68,0:00:17.33,Default,,0000,0000,0000,,hay algunos problemas de desempeño\Nacechando bajo la superficie. Dialogue: 0,0:00:17.33,0:00:20.33,Default,,0000,0000,0000,,Recuerda que las pilas de memoria\Nen los tiempos de ejecución de Android Dialogue: 0,0:00:20.33,0:00:23.72,Default,,0000,0000,0000,,están segmentadas en espacios\Nbasado en el tipo de asignación Dialogue: 0,0:00:23.72,0:00:27.98,Default,,0000,0000,0000,,y en cómo el sistema organiza mejor\Nlas asignaciones para eventos GC futuros. Dialogue: 0,0:00:27.98,0:00:30.58,Default,,0000,0000,0000,,Y cada espacio tiene su propio\Ntamaño de memoria reservada. Dialogue: 0,0:00:30.58,0:00:34.14,Default,,0000,0000,0000,,Cuando el tamaño combinado\Nde un objeto en un espacio Dialogue: 0,0:00:34.14,0:00:38.05,Default,,0000,0000,0000,,se acerca al límite máximo\Nse inicia un recolector de basura Dialogue: 0,0:00:38.05,0:00:40.25,Default,,0000,0000,0000,,para liberar espacio y eliminar\Nobjetos innecesarios. Dialogue: 0,0:00:40.25,0:00:43.94,Default,,0000,0000,0000,,Éstos eventos GC generalmente no son\Nun problema de desempeño perceptible. Dialogue: 0,0:00:43.94,0:00:46.37,Default,,0000,0000,0000,,Pero, muchos de ellos\Nocurriendo una y otra vez Dialogue: 0,0:00:46.37,0:00:48.92,Default,,0000,0000,0000,,pueden terminar consumiendo\Ntodo tu tiempo de recuadro. Dialogue: 0,0:00:48.92,0:00:50.72,Default,,0000,0000,0000,,Mientras más tiempo pasas con los GC Dialogue: 0,0:00:50.72,0:00:54.49,Default,,0000,0000,0000,,menos tiempo tendrás para otras cosas,\Ncomo renderizar o transmitir audio. Dialogue: 0,0:00:54.49,0:00:57.63,Default,,0000,0000,0000,,Una situación común en la cual\Ncaen muchos desarrolladores, que causa Dialogue: 0,0:00:57.63,0:01:00.79,Default,,0000,0000,0000,,que causa que ocurran GC\Nse conoce como fuga de memoria. Dialogue: 0,0:01:00.79,0:01:04.27,Default,,0000,0000,0000,,Las fugas de memoria son objetos\Nque la aplicación ya no utiliza Dialogue: 0,0:01:04.27,0:01:07.40,Default,,0000,0000,0000,,pero que el recolector de basura\Nno reconoce como "sin utilizar". Dialogue: 0,0:01:07.40,0:01:09.50,Default,,0000,0000,0000,,El resultado es que permanecen\Nresidiendo en la pila, Dialogue: 0,0:01:09.50,0:01:13.28,Default,,0000,0000,0000,,ocupando espacio valioso\Nque no se libera para otros objetos. Dialogue: 0,0:01:13.28,0:01:14.54,Default,,0000,0000,0000,,A medida que se fuga memoria, Dialogue: 0,0:01:14.54,0:01:17.80,Default,,0000,0000,0000,,el espacio disponible en la generación\Nde la pila va disminuyendo Dialogue: 0,0:01:17.80,0:01:22.23,Default,,0000,0000,0000,,más y más, lo que implica que habrá\Nmás GC ejecutándose con más frecuencia Dialogue: 0,0:01:22.23,0:01:25.49,Default,,0000,0000,0000,,para tratar de liberar espacio para\Nejecutar normalmente los programas. Dialogue: 0,0:01:25.49,0:01:28.53,Default,,0000,0000,0000,,El encontrar y reparar fugas de memoria\Nes cosa complicada. Dialogue: 0,0:01:28.53,0:01:30.04,Default,,0000,0000,0000,,Algunas fugas se crean fácilmente, Dialogue: 0,0:01:30.04,0:01:33.79,Default,,0000,0000,0000,,como al hacer referencias circulares\Na objetos que el programa no utiliza. Dialogue: 0,0:01:33.79,0:01:35.41,Default,,0000,0000,0000,,Mientras que otros no son tan simples, Dialogue: 0,0:01:35.41,0:01:39.68,Default,,0000,0000,0000,,como el mantener objetos cargadores\Nde clase mientras se cargan. Dialogue: 0,0:01:39.68,0:01:42.44,Default,,0000,0000,0000,,En todo caso, una aplicación rápida\Ny que se ejecuta con fluidez Dialogue: 0,0:01:43.16,0:01:45.64,Default,,0000,0000,0000,,debe estar consciente y ser sensible\Nante posibles de memoria. Dialogue: 0,0:01:45.64,0:01:48.16,Default,,0000,0000,0000,,Porque tu código se va a ejecutar\Nen un universo de dispositivos Dialogue: 0,0:01:48.16,0:01:49.27,Default,,0000,0000,0000,,de diferentes tipos Dialogue: 0,0:01:49.27,0:01:52.15,Default,,0000,0000,0000,,y no todos van a tener el mismo tamaño\Ny consumo de memoria. Dialogue: 0,0:01:52.15,0:01:55.42,Default,,0000,0000,0000,,Por suerte, hay una sencilla herramienta\Nque nos ayudará a detectar Dialogue: 0,0:01:55.42,0:01:57.61,Default,,0000,0000,0000,,si existen fugas, dentro del kit SDK\Nde Android. Dialogue: 0,0:01:57.61,0:01:58.80,Default,,0000,0000,0000,,Veamos.