“Se produjo un error durante la inicialización de la VM; No se pudo reservar suficiente espacio para el montón de objetos ”usando -Xmx3G


94

En primer lugar, tengo una caja con 8 GB de RAM, así que dudo que el problema sea la memoria total. Esta aplicación funciona bien en máquinas con 6 GB o menos.

Estoy tratando de reservar 3 GB de espacio usando -Xmx3G en "Argumentos de VM" en Configuraciones de ejecución en Eclipse.

Cada vez que intento reservar más de 1500 MB, aparece este error: “Se produjo un error durante la inicialización de la VM; No se pudo reservar suficiente espacio para el montón de objetos ”usando -Xmx3G

¿Que esta pasando aqui?


2
¿Qué versión de Java tienes? ¿En qué sistema operativo estás ejecutando?
Adam Rofer

Este era Win7 y tenía instaladas 3 versiones diferentes de Java. Uno de ellos era el JRE de 32 bits que estaba usando Eclipse.
user1212731

3
No olvide marcar una respuesta como correcta.
xdhmoore

Simplemente cambie la configuración en gridle.property con su espacio adecuado
Bhushan

Respuestas:


64

¿Podría ser que esté usando un jvm de 32 bits en esa máquina?


8
Perdón por la pregunta estúpida, pero ¿cómo puedo comprobarlo? ¿Y cómo puedo usar 64 bits?
user1212731

3
En realidad, acabo de probar java -d64 -version en la línea de comandos y se me ocurrió una máquina virtual de servidor de 64 bits.
user1212731

6
Aparentemente, Eclipse estaba usando la versión de 32 bits de JRE que había instalado anteriormente, aunque la de 64 bits era la última instalación. Cambié la configuración en Preferencias -> JRE instalados para resolver este problema. ¡Muchas gracias por su respuesta!
user1212731

3
En cualquier caso, ¿no deberían bastar 32 bits para direccionar 4 GB?
Thomas

7
Debería serlo, pero esto resuelve mi problema. No votar a favor de esta respuesta debido a la falta de explicación. Este enlace explica cómo un jvm de 32 bits no puede superar el espacio de almacenamiento máximo de 1 GB
Steven

58

A continuación se explica cómo solucionarlo: Vaya a Start->Control Panel->System->Advanced(tab)->Environment Variables->System

Variables->New:
Variable name: _JAVA_OPTIONS   
Variable value: -Xmx512M

Variable name: Path  
Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin;  

Cambie esto a su ruta apropiada .


4
Solo una nota para los demás. Agrega una variable SYSTEM, no una variable USER. Me encontré con este problema en Eclipse y no tuve que reiniciar mi máquina después de hacer los cambios anteriores ... solo tuve que reiniciar Eclipse. ¡Gracias!
captain_jim1

Para las personas curiosas, el indicador -Xmx en _JAVA_OPTIONS especifica el tamaño máximo de almacenamiento dinámico de JVM permitido. Esto evita que la JVM de solicitar espacio razonable (especialmente unallocatable contigua para máquinas de 32 bits ...)
Varun

41

En realidad, este no es un problema específico de Eclipse; es un problema general de Java en Windows. Es debido a cómo la JVM asigna memoria en Windows; insiste en asignar una porción contigua de memoria, que a menudo Windows no puede proporcionar, incluso si hay suficientes porciones separadas para satisfacer la solicitud de asignación. Hay utilidades que intentarán ayudar a Windows a "desfragmentar" su memoria, lo que, en teoría, ayudaría a esta situación; pero realmente no los he probado en serio, así que no puedo hablar de su efectividad. Una cosa que he escuchado a veces que puede ayudar es reiniciar Windows y, antes de iniciar cualquier otra aplicación, iniciar la aplicación Java que necesita una gran cantidad de memoria. Si tiene suerte, Windows todavía no habrá fragmentado su espacio de memoria y Java obtendrá el bloque contiguo que se solicita.

En algún lugar de Internet hay más explicaciones técnicas y análisis de este problema, pero no tengo ninguna referencia a la mano.

Sin embargo, encontré esto, que parece útil: https://stackoverflow.com/a/497757/639520


2
En mi caso, tu respuesta parece funcionar. No reinicié Windows, pero intenté cerrar otras aplicaciones en mis ventanas y luego ejecutar Java y pude iniciar la VM.
sttaq

22

Primero, el JRE de 32 bits no puede usar más ~ 1,5 Gb de RAM. Entonces, si quieres más, usa un JRE de 64 bits.

En segundo lugar, cuando se inicia una nueva JVM, esta suma la propiedad -Xmx de todas las JVM que se están ejecutando y verifica si queda suficiente memoria en el sistema para ejecutarse en su propio -Xmx, si no es suficiente, se produce el error.


15

Estaba usando Liferay con el servidor Tomcat de eclipse IDE. Me quedé atascado con este mismo error al hacer clic en el inicio del servidor. Haga doble clic en el servidor de eclipse. abre la página Descripción general del servidor. Argumentos de memoria actualizados de -Xmx1024m -XX: MaxPermSize = 256m a -Xmx512m -XX: MaxPermSize = 256m. Entonces funcionó para mí.



9

Asegúrese de que Eclipse esté ejecutando la misma JVM que cree que está ejecutando. Si alguna vez usa java en su navegador web, es probable que tenga una versión de 32 bits flotando también que podría tener prioridad si se instaló o actualizó últimamente.

Para estar absolutamente seguro, recomiendo agregar estas dos líneas a su eclipse.iniarchivo en la parte superior:

-vm 
C:/Java/jdk1.6.0_27/bin

... en C:/Java/jdk1.6.0_27/binqué lugar de mi máquina se encuentra la JVM que sé que es de 64 bits. Asegúrese de tener la bincarpeta allí.

(Como beneficio adicional, en Windows 7, esto también le permite "fijar la pestaña", por lo que tuve que hacer esto para mi propio uso)


El argumento -vm debe apuntar al ejecutable de Java, no solo a una carpeta. Ver wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz

1
Incorrecto. Vea este error de Eclipse: bugs.eclipse.org/bugs/show_bug.cgi?id=314805
Adam Rofer

¡Este era de hecho el problema! Eclipse estaba usando la versión de 32 bits de JRE que había instalado en algún momento. ¡Muchas gracias por la respuesta y por guiarme en la dirección correcta! Lo aprecio mucho.
user1212731

@AdamRofer, ese error es interesante, pero específicamente sobre Windows 7 y para solucionar el problema de fijar Eclipse en la barra de tareas. En general, eclipse.ini debería apuntar al ejecutable java, aunque el lanzador Equinox parece ser inteligente porque buscará un ejecutable java si -vm apunta a una carpeta (en Windows, al menos).
E-Riz

@ E-Riz "should" es demasiado estricto para mi gusto :) Espero que resuelvan el error sin tener que cambiar el argumento vm en algún momento. Aquí hay más información que sería bueno para ellos actualizar en su eclipse.inipágina: wiki.eclipse.org/…
Adam Rofer

5

Este es el problema del tamaño del montón. Edite su .bat(archivo por lotes). Puede que muestre un tamaño de pila 1024. Cámbielo a 512 Entonces debería funcionar.


2

También tuve el mismo problema al usar Eclipse, que era de 32 bits y la JVM que usaba era de 64 bits. Cuando enrute el Eclipse a JVM de 32 bits, funcionó


2

Simplemente coloque el #símbolo delante de org.gradle.jvmargs=-Xmx1536men gradle.properties

 # org.gradle.jvmargs=-Xmx1536m

¡No estoy seguro de cómo funcionó al probar Kotlin-multiplatform en mac os! de todos modos, gracias!
Chintan Soni

1

Sé que llego un poco tarde, pero aquí viene mi respuesta:

Acabo de instalar la versión en línea de Java de Oracle (no la versión de 64 bits sin conexión).

Después de haber agregado la variable JAVA_HOME ENV, ¡simplemente funcionó!

Espero poder ayudar :)


0

Probablemente esté intentando opciones incorrectas de todos modos. Recibí un error similar con el registro de errores de soporte:

Java HotSpot(TM) Client VM warning: ignoring option PermSize=32M; support was removed in 8.0
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0

En mi caso, el software todavía no era compatible con Java 8 (el script usaba argumentos antiguos de JVM), pero yo tenía Java 8 de forma predeterminada.


0

Una de las razones de este problema es que no hay memoria disponible para que Tomcat se inicie. Intente eliminar el software en ejecución no deseado de Windows y reinicie eclipse y tomcat.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.