Garbage Collector

To?
01 de Junio del 2004
HOLA:

Me gustaría saber que es el Garbage Collector y como se usa, por ejemplo lo de asignación de tamaño de memoria, y del código lo de finalize() y los Throws. Más que nada algú pequeño ejemplillo de como se usa pero dentro del código.

De antemano les agradesco por su respuesta.

Lucas
01 de Junio del 2004
Unas puntualizaciones:
El garbage collector como ya han dicho, es una parte de la VM que se encarga de liberar aquella memoria que se ha dejado de utilizar, se ha dejado de asignar. Es un proceso de baja prioridad que lanza la VM y que hace su trabajo como quiere y cuando quiere. Por mucho que invoques a System.gc(); eso no te garantiza que entre en funcionamiento y libere la memoria. Si quieres ayudarle, cuando dejes de untilizar una variable u objeto, asignale null para que el gc "se de cuenta". El tema de los finalize(), tambien sirve para ayudar, pero francamente, estoy en un proyecto bastante grande en JAVA y nunca lo hemos utilizado, preferimos hacer tuning del gc y la vm antes que tenermos que meter en codigo a liberar memoria, pues para eso el JAVA se encarga solito, mas o menos. Hay otra forma de ayudarle al gc a hacer su trabajo, es el paquete java.ref.* que contiene clases que sirven para referenciar objetos de una manera mas o menos fuerte e indicarle al gc lo que queremos que haga. Aun con todo, tampoco lo utilizamos. Es preferible tener un buen codigo que reutilice objetos, utilice pools, haga cache. Fuera del codigo, se le pueden indicar a la VM y al GC diversos parametro para ajustar su funcionamiento y que la aplicacion funcione correctamente (o que simplemente funcione cuando antes no lo hacia). Para eso tienes los parametros de gestion de memoria de la VM, -Xms, -Xms, Xss. Tambien puedes jugar con la version HotSpot, classic, server y demas, ademas de jugar con la native i/o para mejorar el rendimiento. En cuanto al GC, se le puede especificar que estrategia seguir (en la jdk1.4) en funcion del tipo de aplicacion. No obstante, todo esto se trata de tuning y como tal, es un arte, se trat de probar con diversos valores hasta que consigamos un redimiento "aceptable". Por no hablar del tuning del SO. Por ello te recomiendo que te centres en elaborar un buen codigo y no te preocupes tanto del gc.

aa
01 de Junio del 2004
como su nombre lo dice es el basurero, cuando usas una aplicacion, y la cierras este libera la cantidad de memopria que uso tu programa, aunqeu hay mucho mas por investigar eso es lo que yo se.

itki1578
01 de Junio del 2004
SE SUPONE QUE EL JAVA MANEJA SOLO LA MEMORIA, MEDIANTE LA LLAMADA INTERNA AL GC GARBAGE COLECTOR. ESTO ES CIERTO, PERO HAY MUCHO QUE LEER ACERCA DE CUANDO LA INFORMACION QUE HAY EN MEMORIA ESTA DESREFERENCIADA, Y EL GC LO ELIMINA, ACERCA DE ESO SE PUEDEN LEER DE LOS FINALIZADORES. LO UNICO UTIL ES QUE LLAMANDO A GC QUE PERTENECE A SYSTEM, SE PUEDE LIBERAR MEMORIA

chuidiang
01 de Junio del 2004
El Recolector de basura libera toda la memoria que tienes reservada y no estás utilizando.
Generalmente no tienes que preocuparte de él, ya que funciona sólo.

Es posible que cuando una clase se libera, necesites hacer algo. Por ejemplo, tienes una clase que es una conexión con base de datos. Cuando no la necesites, el recolector de basura la liberará. Para darte oportunidad de cerrar esa conexión, el recolector llamará al método finalize() de dicha clase, que por defecto no hace nada. Tu deberías redefinir ese método para que cierre esa conexión a base de datos.

Si te vas a algo más complejo, el recolector de basura usa una serie parámetros para funcionar (tamaño de memoria, cada cuando dedicarse a liberar memoria, etc, etc). Todos esos parámetros puedes configurarlos en la llamada a java. De todas formas, esto no lo toca casi nadie, salvo aplicaciones muy grandes y complejas que necesitan afinar esos parámetros para mejorar su rendiemiento.

Se bueno.