Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: ethiel en 20 de Mayo de 2007, 11:52:07 AM

Título: Recolector de basura de java
Publicado por: ethiel en 20 de Mayo de 2007, 11:52:07 AM
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?.
Título: Recolector de basura de java
Publicado por: Warchief en 20 de Mayo de 2007, 01:57:31 PM
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
Título: respuesta
Publicado por: ethiel en 20 de Mayo de 2007, 02:18:19 PM
Gracias por la respuesta, voy a investigar un poco.
Título: Recolector de basura de java
Publicado por: ethernet en 20 de Mayo de 2007, 08:28:35 PM
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.
Título: respuesta
Publicado por: ethiel en 22 de Mayo de 2007, 11:06:36 PM
Se me ocurre una cosa: ¿Y si creas un hilo exclusivamente para el recolector a poca prioridad?. ¿Se seguiría parando el programa?.
Título: Recolector de basura de java
Publicado por: ethernet en 22 de Mayo de 2007, 11:32:28 PM
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.
Título: Recolector de basura de java
Publicado por: Zaelsius en 23 de Mayo de 2007, 12:18:39 AM
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..
Título: Recolector de basura de java
Publicado por: ajmendoza en 23 de Mayo de 2007, 12:36:39 AM
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
Título: Recolector de basura de java
Publicado por: shephiroth en 23 de Mayo de 2007, 10:59:53 AM
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.
Título: respuesta
Publicado por: ethiel en 23 de Mayo de 2007, 08:01:36 PM
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. :)