Sigo con el mismo problema.

Andres Isabel Medrano
10 de Junio del 2002
He provado la solución que me ha dado Luis, el modificar a 128M la memoria de la aplicación y el error persiste. El problema que tengo es como "vaciar" la memoria ya que estoy utilizando una serie de "dibujillos" creados mediante un programa de diseño llamado GLG que consume mucha memoria. Por tanto, ¿Como podria liberar la memoria al cerrar uno de los JFrames y abrir otro?
P.D: el error es, "java.lang.OutOfMemoryError
<<no stack trace available>>"
Muchas gracias por vuestras respuestas.

Luismahou
10 de Junio del 2002
Bueno, pues te voy a decir como complementar lo anterior usando un tipo de referencias especiales que se limpian cuando la Máquina Virtual de java se queda sin memoria. Hay tres tipos: SoftReference, WeakReference y PhantomReference.

Con respecto a PhantomReference no te puedo decir mucho, porque no conseguí entender muy bien como funcionaba.

Si tienes objetos que utilizan mucha memoria, y quieres que esa memoria se libere cada vez que no se esté utilizando, puedes usar las SoftReferences o WeakReferences. Consiste en crear un objeto A. Luego crear un objeto SoftReference (por ejemplo) y pasarle el objeto A. Luego pones ese A a null. Una vez has hecho eso sólo tienes una referencia a esa posición de memoria, que es la SoftReference. Cómo la memoria de ese objeto se puede liberar en cualquier momento, lo que tienes que hacer antes de usar ese objeto es comprobar que existe. Si existe lo utilizas y si no lo vuelves a generar. La diferencia entre SoftReference y WeakReference es que las referencias Soft durán más tiempo en memoria que las Weak. Las Weak una vez utilizadas se eliminan y estás obligado a re-generarlas siempre.

Esto es un poco complicado de entender a la primera, así que mirate los links. El segundo es bastante interesante. También mírate en el API el paquete java.lang.ref.

Unos links para que obtengas más información:
http://developer.java.sun.com/developer/technicalArticles/ALT/RefObj/
http://www.javaworld.com/javaworld/jw-01-2002/jw-0104-java101.html