Foros del Web » Programación para mayores de 30 ;) » Java »

Tamaño maximo maquina virtual Java

Estas en el tema de Tamaño maximo maquina virtual Java en el foro de Java en Foros del Web. Hola, en primer luegar pido disculpas si digo algo que no sea cierto, pues todo lo que os voy contar lo he ido aprendiendo estos ...
  #1 (permalink)  
Antiguo 16/10/2010, 05:06
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Tamaño maximo maquina virtual Java

Hola, en primer luegar pido disculpas si digo algo que no sea cierto, pues todo lo que os voy contar lo he ido aprendiendo estos meses gracias a la web.

Estoy haciendo un proyecto fin de carrera, cuyo objetivo es implementar con lenguaje Java, un algoritmo matemático.

Ya tengo el código terminado y correcto, y estos días he estado cambiando cosas para mejorar la eficiencia del código (evitando bucles innecesarios, cambiando líneas de código por métodos ya creados de Java,...) mejorando considerablemente el tiempo de ejecución.

Pero me sigo encontrando un problema, para cierto número de variables de entrada, me sale la excepción en ejecución de "Java heaps space". Puesto que el código está optimizado, el problema se encuentra en que se satura la memoria que Java tiene disponible en su máquina virtual. Como mi Pc tiene una RAM de 1GB, he probado a aumentarle dicha memoria hasta 896 MB, con la orden -Xms896m. Consigo aumentar el número de datos de entrada sin que se sature el programa, pero sigue llegando a un tope.

¿Alguna otra solución a parte de implementarlo en un Pc con más memora RAM y poder dar así más memoria a la máquina virtual de Java?

En mi implementación, los datos de entrada son una matriz de (N*5), que represento mediante un ArrayList (N vectores de 5 componentes). Y durante la ejecución del algoritmo tengo que formar una matriz de (N*2N), también con arrayList (qué es donde se satura cuando pongo más de N = 7500). En teoría el programa está diseñado para trabajar con varios cientos de miles de variables.

¿Alguna orientación?

Muchas gracias :)
  #2 (permalink)  
Antiguo 16/10/2010, 05:38
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Tamaño maximo maquina virtual Java

La cosa es que he estado mirando en Administrador de tareas>procesos y la cantidad de memoria que me utiliza el "java.exe" y resulta que con el máximo de N, que puedo poner para que no se sature me pone que ocupa solo 361MB.... curioso.
  #3 (permalink)  
Antiguo 16/10/2010, 12:59
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 18 años, 3 meses
Puntos: 51
Respuesta: Tamaño maximo maquina virtual Java

Le puedes dar tanta memoria como tengas disponible, teniendo en cuenta que en S.O. de 32 bits no le puedes asignar más de 2 Gigas y que nunca debería usar espacio de swap (en S.O. que lo tengan) puesto que el G.C. es alérgico al swap .

No te fies mucho de lo que indique el S.O. en cuanto a memoria usada puesto que a veces lo que calculan no es lo que realmente hay, ya que muestran otras cosas. Igualmente, la memoria que tu le asignas es para el HEAP, pero el programa en si de Java ya consume unos ciento y pico megas, y está el stack de los threads etc. ,así que el número exacto que vas a consumir no es lo que pones como Heap, ni mucho menos.

En cuanto a optimizarlo, pues las técnicas habituales para consumir menos memoria: todo lo que no necesites en un momento dado en memoria, lo pasas a disco, por ejemplo. Hay técnicas más sofisticadas que usan ficheros mapeados en memoria (hacen como si fuera memoria pero es disco, pero sin ser tan lento como disco por que el S.O. se encarga del acceso) pero son bastante más complejas de usar. No existen soluciones generales puesto que cada problema de optimización es un mundo.

Si lo necesitas todo en memoria a la vez... pues como dice el dicho "no hay más cera que la que arde". Si necesitas más memoria pues hay que darle más.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 16/10/2010, 14:20
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 14 años
Puntos: 260
Sonrisa Respuesta: Tamaño maximo maquina virtual Java

Hola,

Prueba con los siguientes parámetros,

Código:
-Xms768M -Xmx768M -XX:MaxPermSize=512M
Si así no funciona seguramente necesitas mas RAM o el código no está realmente optimizado, si el total de memoria que estas solicitando pasa de 768 Mb seguramente no va a funcionar puesto que no hay mas.

Windows 7 ocupa 512 Mb aprox solamente para el sistema operativo, Debian utilizará 384 Mb aprox, Solaris 768 Mb aproximadamente, lo cual no te deja mucho para usar si tienes solamente 1 Gb. También si el código hace solicitudes de reserva de memoria en intervalos de tiempo muy cortos te genera errores de ese tipo, en computadoras con poca memoria y poca velocidad.

Saludos,
  #5 (permalink)  
Antiguo 16/10/2010, 18:36
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Tamaño maximo maquina virtual Java

Gracias por las respuestas.

He probado en un PC de 4GB de RAM, y S.O. Windows 7. Y evidentemente como he podido añadirle más memoria, me deja introducir más datos.
Lo extraño es que solo me deja añadirle 1536MB a la máquina virtual de java,.... no se el motivo pero si le añado más, me sale un error de java, diciendo que no fue posible reservar dicha memoria para la Java Virtual Machine.

Lo dicho, que aunque al mejorar la RAM, puedo aumentar la cantidad de datos iniciales, no llego a lo que me pedían en el proyecto, trabajar con varios cientos de miles. No sé cómo haré. Porque en realidad la parte del código donde se queda sin espacio es cuando creo la matriz de (N por 2N), cuando N>18000 (aprox), y ahí no puedo optimizar nada, y esta matriz la necesito tener accesible facilmente para posteriores consultas.
  #6 (permalink)  
Antiguo 18/10/2010, 00:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 18 años, 3 meses
Puntos: 51
Respuesta: Tamaño maximo maquina virtual Java

Para poder usar los 4GB de RAM tendrías que usar un JDK de 64 bits, ya que no sólo el S.O. ha de ser de 64 bits, también lo ha de ser el JDK. No te dejará ponerle más de 1.536MB por que entre eso y lo que consume la propia JVM, llegarás a los 2GB del máximo de un proceso de 32 bits.
Si necesitas tener toda la matriz en memoria entonces según lo que metas en cada posicion de la matriz... esta claro que en cuanto te descuides te pasas del limite. Para N=18.000 tienes 648.000.000 de posiciones en la matriz. Si lo llenas únicamente de int, eso son, mínimo, 4 bytes por posicion = 2.592.000.000 bytes.... y eso sólo para la matriz, así que echa cuentas... .

Tenerla accesible fácilmente no significa tener que tenerla en memoria, al menos no con estas magnitudes. Una solución es manejar tu la gestión de lo que hay en memoria y lo que hay en disco y otra usar Memory-Mapped Files. No es trivial usarlos pero con esos requerimientos que tienes, no lo puedes solucionar de forma trivial.

Suerte.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: maquina, maximo, tamaño, virtual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:48.