Solución: se produjo un error durante la inicialización de la máquina virtual que no pudo reservar suficiente espacio para el montón de objetos



Pruebe Nuestro Instrumento Para Eliminar Los Problemas

Aunque los applets de Java no son una tecnología web popular en estos días, existen innumerables razones para implementar una máquina virtual Java directamente en un servidor Linux. Si intenta ejecutar el comando java de Linux directamente, ya sea en hardware discreto o dentro de su propia máquina virtual, es posible que obtenga un mensaje de 'error ocurrido durante la inicialización de la máquina virtual no se pudo reservar suficiente espacio para el montón de objetos'.



Esto probablemente parezca bastante extraño porque lo más probable es que tenga suficiente RAM para ejecutar el comando, pero se debe en gran parte a una peculiaridad específica en la forma en que se utilizan las páginas de memoria física y virtual. Especificar algunos tamaños relativamente grandes debería permitirle omitir por completo este mensaje y ejecutar el comando java como lo haría con cualquier otro.



Método 1: uso de las opciones de la línea de comandos

Si ha intentado ejecutar java y ha recibido este mensaje, es probable que ya haya ejecutado el comando gratuito para asegurarse de que haya suficiente memoria para ejecutar el programa.



java y comandos gratuitos

Tenga en cuenta que en nuestra máquina de prueba teníamos unos 2,3 GB de RAM física y aún no se había utilizado una sola página de memoria virtual. Si nota que tiene un problema de memoria, querrá cerrar otras cosas que tenga en ejecución antes de volver a intentarlo. Por otro lado, aquellos que encontraron que tienen mucha memoria libre pueden intentar especificar un tamaño directamente.

Por ejemplo, en nuestra máquina pudimos ejecutar el comando como java -Xms256m -Xmx512M y funcionó como se esperaba. Esto limita el tamaño del montón que la máquina virtual Java intenta reservar al inicio. Dado que una máquina virtual sin restricciones podría hipotéticamente hacer cosas inusuales, podría arrojar mensajes de error en un sistema que de otro modo sería libre. También es posible que desee jugar con esos dos valores antes de encontrar la combinación correcta.



Esto puede ser un problema independientemente de en qué lo esté ejecutando, ya que la JVM no tiene nada que ver con el tipo de VM que pueda estar usando para ejecutar GNU / Linux.

Método 2: exportar las variables para que el cambio sea permanente

Cuando encuentre un valor que funcione, puede exportarlo para que sea permanente para esa sesión. Por ejemplo, usamos export _JAVA_OPTIONS = ’- Xms256M -Xmx512M’ desde el símbolo del sistema de bash y nos permitió ejecutar el comando java por sí solo sin ninguna otra opción hasta que cerramos la sesión de nuestro servidor.

Debía ejecutarse nuevamente cuando iniciamos sesión en otra sesión, por lo que es posible que desee agregarlo a cualquier script de inicio relevante si planea usar el comando java con bastante frecuencia. Agregamos la línea a nuestro archivo .bash_login y pareció funcionar cada vez que usamos un mensaje de inicio de sesión sin tener que ejecutarlo nuevamente, aunque es posible que tenga que buscar otra ubicación para él si está trabajando con un shell diferente.

Es posible que haya notado que solo ciertas configuraciones de hardware activan este mensaje de error. Esto se debe a que suele suceder en máquinas con una gran cantidad de RAM física, pero límites más bajos de uso. Java intentará asignar un bloque enorme solo para que se le diga que no puede, lo que interpreta como quedarse sin memoria.

Método 3: Impresión de las opciones actuales de Java

Si ha estado trabajando en la línea de comandos y desea una referencia rápida a lo que ha establecido actualmente el valor _JAVA_OPTIONS, simplemente ejecute echo $ _JAVA_OPTIONS e inmediatamente imprimirá los valores actuales. Esto es útil para solucionar problemas cuando está tratando de encontrar los números correctos para probar.

Tenga en cuenta que si bien esta solución no debería requerir ningún otro juego, Java arrojará el mensaje 'No se pudo reservar suficiente espacio para el montón de objetos' si alguna vez se encuentra realmente en el extremo corto de la memoria virtual. Si este es el caso, entonces querrá volver a verificar qué procesos se están ejecutando actualmente y posiblemente reiniciar el servidor si esa es una opción. También puede crear más espacio de intercambio, pero si esto es un problema, generalmente es mejor intentar corregirlo de alguna otra manera.

En el raro caso de que su configuración parezca correcta pero aún no funcione, asegúrese de haber instalado el paquete Java de 64 bits, ya que debería ser inmune a este problema. Los requisitos de memoria contigua solo se aplican a la versión de 32 bits de Java. Descubrimos que en un puñado de casos la versión de 64 bits intentó crear una máquina virtual de 32 bits, por lo que especificar la opción -d64 en la línea de comando nos solucionó.

3 minutos de lectura