Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Recolector de basura de java

Iniciado por ethiel, 20 de Mayo de 2007, 11:52:07 AM

« anterior - próximo »

ethiel

Buenas a todos los foreros/as.
Mi duda está en relación al recolector de basura de java. Si por ejemplo necesito calcular 3 millones de posibilidades de cualquier evento, java da un problema de heap space. Según me han comentado se puede solucionar aumentando la cantidad de memoria de la máquina virtual, pero es mas eficiente utilizar bien el recolector de basura. :)

Entonces, si quiero que no de ese problema, ¿debo de escribir a disco duro, y entonces, en el momento que no existan referencias a ese array (por ejemplo), el recolector de basura libera memoria?.

Warchief

No recuerdo la política de llamada al recolector, pero puedes llamarlo cuando quieras.

System.gc()

http://cdsmith.twu.net/professional/java/myths/gc.html

ethiel

Gracias por la respuesta, voy a investigar un poco.

ethernet

Lo que mola es llamar a System.gc() y a continuación tener 1 segundo de parada del programa. Me encanta java, menos cuando hay que hacer algo rápido y bien.

ethiel

Se me ocurre una cosa: ¿Y si creas un hilo exclusivamente para el recolector a poca prioridad?. ¿Se seguiría parando el programa?.

ethernet

Ten en cuenta que todo lo que se pueda hacer ya lo ha hecho sun. Aparte que el gc tiene que recorrer todo el grafo comprobar y si hay referencias que se apuntan mutuamente y permanecen en memoria, etc, etc. Es algo pesadísimo.

Zaelsius

Ethiel, a veces no hay más remedio que "darle" más espacio al heap de Java. Por defecto el máximo está en 64MB, lo que puede ser poco para segun qué aplicación:

http://java.sun.com/docs/hotspot/ism.html

Yo mismo he tenido que ampliar el heap inicial máximo para alguna práctica de algorítmica de la universidad..

ajmendoza

Cita de: "ethernet"Lo que mola es llamar a System.gc() y a continuación tener 1 segundo de parada del programa. Me encanta java, menos cuando hay que hacer algo rápido y bien.

Joer, q cuchillada... he estado riendome un buen rato (mi chica me ha llamado superfriki por reirme con esas cosas y lo q es peor, luego contarselo a modo de chiste :P).

Perdón por el off topic

shephiroth

La idea del thread para la llamada al recolector de basura no es mala, pero para que funcione bien creo que habria que sincronizar los threads (el principal de tu programa y el thread que llama al recolector). De esta forma el thread principal dormiria automaticamente mientras el segundo trabaja, y no se bloquearia.

ethiel

Bufff.. Veo que el tema del recolector da mucho de si... Por el momento, no ampliaré la heap, para obligarme a optimizar la memoria.   (Así aprendo mas a programar en java, que me encannnnnta :).
Muchas gracias por la ayuda y los comentarios.

Saludos.

Y sí, por reírnos de éstas cosas es para que nuestras novias nos llamen frikis. :)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.