Java - OutOfMemoryError

 
Vista:

OutOfMemoryError

Publicado por Purk (4 intervenciones) el 23/05/2007 12:38:55
Hola.

Al ejecutar un programa de consola me da el siguiente error:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

El ordenador tiene 2 GB de memoria y he probado a utilizar las opciones -Xmx y-Xms de java con valores de hasta 2048m.

Insertando unos cuantos totalMemory() - freeMemory() he podido observar que utilizo alrededor de 65MBytes en el momento en que el programa casca. ¿Alguien sabe qué puede estar ocurriendo?

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:OutOfMemoryError

Publicado por Tom (42 intervenciones) el 23/05/2007 14:37:24
Lo más posible es que tengas algún tipo de loop infinito (algo así como una función que se llama a sí misma y nunca finaliza).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OutOfMemoryError

Publicado por Purk (4 intervenciones) el 23/05/2007 14:45:47
Lo comprobaré, pero no lo creo. El programa trabaja sobre una serie de ficheros y con 100 ficheros funciona correctamente mientras que con 2000 ficheros da ese error. Imagino que si tuviera un bucle infinito fallaría también en el primer caso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OutOfMemoryError

Publicado por Gonzalo (180 intervenciones) el 23/05/2007 18:50:33
¿Y estás cargando los 2000 ficheros todos a la vez o lo abres, lo cargas, lo procesas y lo cierras correctamente cada uno de ellos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OutOfMemoryError

Publicado por Purk (4 intervenciones) el 24/05/2007 15:01:44
Los leo y los proceso uno por uno, pero no sé si los cierro bien. De todas formas he comprobado que los 2000 ficheros los lée bien. El error lo da después, realizando los cálculos con los datos leídos de los ficheros. El código que cada fichero es el siguiente:

ContentHandler handler = new MiSaxReaderHandler();
m_Parser = XMLReaderFactory.createXMLReader();
m_Parser.setContentHandler(handler);
m_Parser.parse(new InputSource(m_Input));
m_Input.close();

MiSaxReaderHandler es una clase derivada de DefaultHandler en el que implemento startElement(...) y endElement(...).
m_Input es un objeto de la clase InputStream en el que tengo abierto el fichero a leer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OutOfMemoryError

Publicado por Gonzalo (180 intervenciones) el 24/05/2007 17:39:34
Si eso está metido en un bucle, lo que estás haciendo es, para cada fichero que cargas, crear un Handler y un Reader, lo cual no parece muy buena idea.

Pero si dices que el error da después, pon el código que da el problema para que lo veamos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OutOfMemoryError

Publicado por Purk (4 intervenciones) el 25/05/2007 11:25:51
Tienes razón en que no es muy buena idea. Lo corregiré.

De todas formas es verdad que el error lo da después. El código es algo complejo y extenso para ponerlo aquí y no puedo identificar el lugar exacto del error, ya que el OutOfMemoryError no me da ninguna información. De todas formas, tengo dos objetos de la clase Vector en los que voy añadiendo objetos HashMap. En un bucle voy aumentando, poco a poco, tanto el tamaño de los HashMap como el número de HashMaps en los vectores.

De todas formas, en los HashMaps solo guardo enteros y el número de ellos no debería ser tanto como para que no me entré en memoria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:OutOfMemoryError

Publicado por Gonzalo (180 intervenciones) el 27/05/2007 16:31:45
Veamos... cuando dices que no son tantos, ¿cuántos Hashmaps tienes en los vectores y cuántos enteros tiene cada uno aproximadamente?

Por lo demás, si necesitas ver cuándo da el error, puedes usar un debugger o puedes meter trazas cada cierto número de líneas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar