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