Java OutOfMemoryError

patricia
07 de Febrero del 2006
Estoy programando en java una aplicaci贸n que trabaja con la base de datos Sleepycat. En mi aplicaci贸n leo de unas tablas e inserto registros, cuando se han insertado unos 2000 registros en varias tablas, la JVM lanza un error "OutOfMemoryError". He probado a vaciar los objetos que no se usan (aign谩ndolos a null) y tambi茅n hago una llamada al System.gc() para solicitar que se ponga en marcha el garbage collector; porque pienso que el problema puede venir por ahi. Sin embargo, el problema no se soluciona. He hecho pruebas, para tratar de ver si el error est谩 en la interacci贸n con las tablas de la base de datos, pero aparentemente no parece que sea eso. ¿Alguien tiene alguna idea? Muchas gracias.

Oscar
07 de Febrero del 2006
Aunque llames el metodo gc, no hay garantia de que el recolector de basura se ejecute. Para forzarlo, puedes hacer lo siguiente:

do {
long oldMemory= Runtine.getRuntime().freeMemory();
System.gc();
long newMemory= Runtine.getRuntime().freeMemory();
} while(oldMemory == newMemory)

El codigo anterior se ejecuta hasta que la oldMemory sea diferente newMemory.

Si los objetos no se limpian, entonces se te debe estar escapando alguna referencia hacia los objetos que quieres limpiar.

Si quieres que revise el codigo enviamelo por correo.

Saludos :)

marcelo maldonado bustos
07 de Febrero del 2006
Tu problemas es mas simple de lo que cress,cuando ejecutas un programa con la JVM, debes asignar un minimo y maximo de pool memoria a utilizar esto lo puedes incluir a los argumentos de ejecuci贸n de tu proceo:
java -jar ppe.jar -Xms10m -Xmx120m -Xloggc:c:\Temp\loggarvagecollector.log

esto asignara 120 como maximo de ejcuci贸n en memoria.

Saludos
MMB