Jejejeje...
Parece claro, viendo el error, que tu máquina virtual se queda sin memoria...
No te preocupes por ello, a ver si puedo darte una solución interesante y espero no remontarme demasiado y parecer un abuelete contando batallitas
(y espero que no os resulte pesado, si ya conoceis algunas, o todas, las cosas que voy a contar... Lo siento por los PRO's
)
En primer lugar, está el recolector de basura de java: Esa cosa fabulosa que se lleva la memoria de las variables que no se usan. Lo malo es que sólo se lleva las que no están referenciadas y no son estáticas (variables declaradas
static) Si tienes declaradas muchas variables (o muy grandes) static, puede que tu código consuma mucha memoria. Y, por cierto, sólo se lleva la memoria de las variables que no están referenciadas. En cuanto una variable referencie a un objeto, el objeto permanecerá en memoria...
Echa un vistazo también a ver si tienes por ahí un bucle grande con un new Objeto dentro que no sea necesario y se te queda ahí el programa (supongo que ya lo habrás hecho
).
La tercera cuestión (y supongo que la respuesta que estabas esperando): La máquina virtual de Java no utiliza toda la memoria disponible del sistema, sino que depende del sistema. En general, creo recordar que en Windows son 64Mb, independientemente de la memoria de tu máquina. Esta memoria puede ampliarse al arrancar la máquina virtual (o sea, al iniciar el programa). Si lanzas tu programa desde la línea de comandos, tienes que meter lo siguiente: -XmxVVVVMb donde VVVV son los Mb que quieres asignarle a tu máquina virtual (512 Mb sería -Xmx512Mb)
Echa un vistazo a esta página que he encontrado, a lo mejor encuentras algo que te resulte útil.
http://rubensa.wordpress.com/Espero que te sirva.
Un saludo.
Silverfox
Edit:
Mira los métodos freememory, maxmemory y totalmemory en el paquete Runtime de Java, con estos podrás monitorizar tu aplicación para ver cuánta memoria gasta.
Un saludo.