En la página principal de los foros
encontrarás los enlaces al
feed general
y al de cada uno de los foros.
Subscribete para mantenerte informado de los cambios y responde a las dudas siempre que te sea posible
Acabo de leer esta interesantísima conversación y te cuento ...
Puedes estar tranquilo: el problema no está en el out.printl ...
Resulta q el applet no me carga en moxila y en explore pero ...
Hola de nuevo, tan solo comentar que vamos a añadir un paso ...
Muy buena herramienta, creo que tambien la usare... Saludos. ...
| Problema de memoria en Java | 25/10/2008 20:52 | |
| anonymous |
Hola, escribo este post porque tengo un problema en una aplicación que he desarrollado en Java. Estoy usando la librería gratuita para gráficas JFreeChart, y creo un BufferedImage cada 500 milisegundos. Llega un momento en el que no tiene más memoria en el heap de Java y la aplicación se queda colgada, no me deja tocar los botones, pero las gráficas se siguen viendo y a su velocidad habitual. Mi pregunta es: ¿cómo puedo hacer para que no tenga ese problema de memoria en mi aplicación? La línea de código que uso para crear la imagen de las gráficas es la siguiente: image = chart.createBufferedImage(310,296); Espero que alguien me pueda echar una mano, porque sé que la memoria sobrante la recoge automáticamente el recolector de basura de Java, pero en mi caso no sé cómo solucionar este problema. Saludos y gracias de antemano. |
|
|
||
| RE: Problema de memoria en Java | 26/10/2008 02:21 | |
| jholder |
podrias poner mas codigo como para ver mas? tienes un while con Thread.sleep? ademas el garbage collector, como dice su nombre recolecta la memoria no usada o basura, pero no lo hace en tiempo real, si la sobre cargas rapidamente llenas el heap. espero tu respeusta juan holder |
|
|
||
| RE: RE: Problema de memoria en Java | 26/10/2008 10:35 | |
| anonymous |
No es exactamente un while lo que tengo, lo que tengo es un temporizador que cada cierto tiempo, por ejemplo, cada 100 milisegundos, o cada 200 msg, en función de la velocidad que el usuario introduzca, llama a ese método donde se encuentra la creación de la gráfica. ¿Tendría que hacer un Thread.sleep() para dormir por un momento el hilo y que el garbaje collector pueda recolectar toda la basura de la memoria? ¿O eso tampoco funcionaría en mi caso? Ante este problema no sé qué hacer, ya que es un tema de memoria, y en Java no se puede liberar memoria ya que se hace automáticamente. Espero que la solución sea la que he comentado, de modo que se pueda eliminar el problema aunque por un momento se duerma el hilo del programa.... Espero respuesta para saber si estoy o no en lo cierto. Un saludo y muchas gracias de antemano. |
|
|
||
| RE: Problema de memoria en Java | 26/10/2008 11:35 | |
| batch4j |
Seguramente lo que pasa es que tengas referencias a las imagenes antiguas y por eso no las echa el GC, comprueba cuantas imagenes tienes cargada y en caso de que sean mas de las que quieres ve viendo donde las referencias y cuando no hagan falta hazles un null otra opcion es crearte un numero de imagenes 1 o mas en un objeto estatico y que todos los sitios referencien a la misma. Como siempre enviar mas codigo puede servir para mas. |
|
|
||
| RE: Problema de memoria en Java | 26/10/2008 12:08 | |
| anonymous |
Yo tengo el siguiente código en un método de mi clase: public BufferedImage creaImagen(int datoMostrar, int tipoGraf, int colHex1, int colHex2) plot = chart.getXYPlot(); image = chart.createBufferedImage(310,296); Cada X milisegundos, llamo a esta función, con la siguiente línea de código: this.image=this.creaImagen(0, 1, 0, 0);image es una variable de tipo BufferedImage que solamente defino una vez, es decir, creo una única instancia de ello, con lo que constantemente estoy machacando la misma variable al recibir la gráfica de la función anterior. He observado que el problema de memoria me lo comienza a dar a partir de los 120 segundos de ejecución. Yo cada X milisegundos obtengo un dato, y lo pinto en la gráfica, es decir, para cada dato lo añado a la serie y lo pinto en la gráfica, creo el BufferedImage. ¿Tiene eso algo que ver? He probado a obtener en vez de cada X milisegundos los datos, cada 2 segundos, pero el problema de memoria me lo sigue dando a los 120 segundos de ejecución. ¿Cuál puede ser el problema en este caso y cómo podría resolverlo? Llevo dos días con este tema y ando bastante quemado porque no sé cómo meterle mano. Espero que alguien me pueda ayudar en la medida de lo posible. Muchas gracias desde ya, un saludo. |
|
|
||
| RE: Problema de memoria en Java | 26/10/2008 12:14 | |
| anonymous |
Se me ha olvidado poner antes el error que me salta con este tema: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
A ver si con esta información alguien puede orientarme un poco más sobre cómo puedo resolverlo. Muchas gracias.... |
|
|
||
| RE: Problema de memoria en Java | 26/10/2008 18:32 | |
| batch4j | El metodo getRef que utilizas no servira para crear una weakreference o alguna cosa parecida, si solo utilizas una variable porque no la defines en estaticono vaya a ser que por algun motivo cada vez que se llame al metodo cree una referencia. | |
|
||