suficiente para paginacion pagina memoria insuficiente hay falta esta equipo archivo abrir java windows memory memory-management windows-xp

java - para - no hay suficiente memoria en el equipo



Herramientas para ver/resolver la fragmentación de memoria de Windows XP (6)

A menos que se esté quedando sin espacio en el archivo de la página, este problema no es que la computadora se esté quedando sin memoria. El objetivo de la memoria virtual es permitir que los procesos usen más memoria virtual de la que está físicamente disponible.

Al no saber cómo la JVM maneja el montón, es un poco difícil decir exactamente cuál es el problema, pero uno de los problemas comunes es que no hay suficiente espacio libre de direcciones contiguas disponible en su proceso para permitir que el montón se extienda. . Por qué esto sería un problema después de que la máquina ha estado funcionando un tiempo es un poco confuso.

He estado trabajando en un problema similar en el trabajo. Descubrí que la ejecución del programa con WinDBG y el uso de los comandos "! Address" y "! Address-summary" han sido invaluables para rastrear por qué el espacio de direcciones virtuales de un proceso se ha fragmentado. También puede intentar ejecutar el programa después de reiniciar y usar el comando "! Address" para tomar una fotografía del espacio de direcciones y luego hacer lo mismo cuando el programa ya no se ejecuta. Esto podría darte una pista sobre el problema. Tal vez algo tan simple como una DLL extra al cargarse pueda causar el problema.

Tenemos un programa Java que requiere una gran cantidad de espacio de almacenamiento dinámico; lo iniciamos con (entre otros argumentos de línea de comando) el argumento -Xmx1500m, que especifica un espacio máximo de almacenamiento dinámico de 1500 MB. Al iniciar este programa en un cuadro de Windows XP que se ha reiniciado recientemente, se iniciará y se ejecutará sin problemas. Pero si el programa se ha ejecutado varias veces, la computadora ha estado activa durante un tiempo, etc., cuando intenta comenzar, aparece este error:

Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.

Sospecho que Windows mismo está sufriendo de fragmentación de memoria, pero no sé cómo confirmar esta sospecha. En el momento en que esto ocurre, Task Manager y sysinternals procexp informan 2000 MB de memoria libre. He visto esta pregunta relacionada con la fragmentación interna

Entonces, la primera pregunta es, ¿cómo confirmo mi sospecha? La segunda pregunta es, si mis sospechas son correctas, ¿alguien sabe de alguna herramienta para resolver este problema? He buscado bastante, pero no he encontrado nada que me ayude, aparte de los reinicios periódicos de la máquina.

ps - cambiar los sistemas operativos tampoco es actualmente una opción viable.


De acuerdo con Torlack, esto se debe a que otras DLL se están cargando y entran en ciertos lugares, lo que divide la cantidad de memoria que puede obtener para la VM en una gran parte.

Puedes hacer algo de trabajo en WinXP si tienes más de 3G de memoria para mover algunas de las cosas de Windows, busca PAE aquí: http://www.microsoft.com/whdc/system/platform/server/PAE/ PAEdrv.mspx

Su mejor opción, si realmente necesita más de 1.2G de memoria para su aplicación java, es mirar Windows de 64 bits o Linux o OSX. Si está utilizando cualquier tipo de biblioteca nativa con su aplicación, tendrá que recompilarla para 64 bits, pero será mucho más fácil que tratar de volver a crear bases de datos y cosas para maximizar la memoria que puede obtener en ventanas de 32 bits. .

Otra opción sería dividir su programa en varias máquinas virtuales y hacer que se comuniquen entre sí a través de RMI o mensajes o algo así. De esta forma, cada máquina virtual puede tener un subconjunto de la memoria que necesita. Sin saber lo que hace tu aplicación, no estoy seguro de que esto ayude de ninguna manera, aunque ...


Tal vez deberías considerar iniciar el programa y reservar la memoria y no finalizar la VM después de cada ejecución. Busque diferentes opciones de GC y libere sus objetos.


Usar Minimem ( http://minimem.kerkia.net/ ) para esa aplicación podría solucionar su problema. Sin embargo, no estoy seguro de que esta sea la respuesta que estás buscando. Espero que ayude.


Use vmmap de las herramientas SysInternals de Microsoft para ver la fragmentación del espacio de direcciones virtuales e identificar qué está dividiendo el espacio.


Sospecho que el problema es la fragmentación de la memoria de Windows. Hay otra pregunta aquí en llamada memoria máxima de Java en Windows XP que menciona el uso del explorador de procesos para ver dónde se asignan los archivos DLL en la memoria y luego para solucionar el problema al volver a basar los archivos DLL para que se carguen en la memoria de una manera más compacta.