• Jueves 14 de Noviembre de 2024, 13:45

Autor Tema:  Outofmemoryerror  (Leído 924 veces)

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Outofmemoryerror
« en: Lunes 9 de Octubre de 2006, 00:29 »
0
Saludos compañeros, en mi aplicacion genero una matriz, de dimension grande (pero la genera siempre), y tng objetos de tipo Vector, LinkedList ... y al hacer calculos muy grandes (por ejemplo puede meter 1000 cadenas grandes, tipo avaccbvbe, las descompone, y mete cada literal en una casilla de la matriz, tipo a av ava avac avacc avaccb ... asi con cada una d las 1000 cadenas), y al paso del tiempo me da un error de OutOfMemoryError.

 A que se puede deber esto ??
Por favor ayudenme. Gracias.

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: Outofmemoryerror
« Respuesta #1 en: Lunes 9 de Octubre de 2006, 11:15 »
0
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.