OutOfMemoryError!
Hola gente, mi problema es el siguiente: Tengo una aplicacion que crea un hilo, dentro de este se crean una serie de objetos, etc..., y una vez que termina la accion se llama a otro hilo dentro de este. El problema esta en que "no se libera" la memoria ocupada por el anterior hilo, y tampoco se como hacerlo?. En el momento que hay 2 o 3 llamadas de este tipo la aplicacion (hilo -> hilo -> hilo ) se va a tomai viento! sale el mensaje: OutOfMemoryError, es decir, no hay memoria disponible. 驴Como diantres libero la memoria??
Para liberar memoria haz que el objeto anteriormente referenciado quede sin ninguna referencia activa valida.
Esto se suele implementar de forma abrupta con
hilo = null;
pero existen muchas otras formas mas eficientes.
Esto se suele implementar de forma abrupta con
hilo = null;
pero existen muchas otras formas mas eficientes.
Buenas!, despues de pasarme horas y horas intentando solucionar el problema, todavia no lo consegui!, aunque algo he avanzado. No basta con poner a null el hilo, lo tengo comprobado con el siguiente ej:
Tengo un objeto, una vez cargado tengo 400.000 b (aprox) de memoria libre, lanzamos un hilo que carga una serie de objetos y al terminar la carga nos queda libre 300.000 b. Justo antes de salir(sin hacer nada mas), liberamos todos los objetos creados en el hilo y damos paso de nuevo al objeto1. Bien, deberia de tener la misma meoria con la que empezo (puesto que el hilo ya murio), pero NO, tiene 360.000 b, 驴dnde quedaron los 40.000 b que faltan?.
Para obtener estos datos de memoria tuve que usar el recolector de basura de forma explicita(Runtime.gc() ). Sino lo uso la memoria no se libera.
Tengo un objeto, una vez cargado tengo 400.000 b (aprox) de memoria libre, lanzamos un hilo que carga una serie de objetos y al terminar la carga nos queda libre 300.000 b. Justo antes de salir(sin hacer nada mas), liberamos todos los objetos creados en el hilo y damos paso de nuevo al objeto1. Bien, deberia de tener la misma meoria con la que empezo (puesto que el hilo ya murio), pero NO, tiene 360.000 b, 驴dnde quedaron los 40.000 b que faltan?.
Para obtener estos datos de memoria tuve que usar el recolector de basura de forma explicita(Runtime.gc() ). Sino lo uso la memoria no se libera.
