¿Cómo comprobar los parámetros de memoria del montón de la máquina virtual Java?
"Excepción en el hilo "main" java.lang.OutOfMemoryError: Java heap space"
Revisé en línea y descubrí que era La imagen es demasiado grande. Esto se puede resolver estableciendo el máximo del montón de jvm.
Primero abra el software Eclipse, seleccione ejecutar en la barra de menú, seleccione Configuraciones de depuración en el menú secundario y luego: seleccione la pestaña (x)=argumentos en la ventana emergente e ingrese todas las VM parámetros La cantidad máxima de memoria requerida, por ejemplo, ingrese -Xmx800m.
A continuación se describen varios parámetros del jvm en detalle:
"MyEclipse ha detectado que el espacio restante de 64 MB de Perm Gen (memoria no dinámica) es inferior a 5". que la memoria no dinámica disponible actualmente es inferior a 5. Entonces sólo necesitamos establecer este valor un poco más grande.
El mensaje proporciona los parámetros de configuración:
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
Aquí hay algunos Preguntas:
1. ¿Cuál es el significado de cada parámetro?
2. ¿Por qué Eclipse puede iniciarse en algunas máquinas pero no en otras después de configurar -Xmx y -XX:MaxPermSize en 512M?
3. ¿Por qué Eclipse no realiza la configuración correspondiente después de escribir los parámetros anteriores en el archivo eclipse.ini?
Responderemos las siguientes preguntas
1. ¿Cuál es el significado de cada parámetro?
El -vmargs en el parámetro significa configurar parámetros de JVM, por lo que los siguientes parámetros son en realidad parámetros de JVM. Primero comprendemos el mecanismo de administración de memoria de JVM y luego explicamos el significado de cada parámetro.
Memoria dinámica y no dinámica
Según la declaración oficial: "La máquina virtual Java tiene un montón, que es el área de datos en tiempo de ejecución, y todas las instancias de clase y matrices son asignado desde el montón El montón se crea cuando se inicia la máquina virtual Java. "La memoria fuera del montón en la JVM se llama memoria no del montón". Se puede ver que la JVM administra principalmente dos tipos de memoria: memoria del montón. memoria no dinámica, es decir, la memoria dinámica es accesible para el código Java y está reservada para los desarrolladores; la memoria no dinámica es la memoria reservada por la JVM para sí misma, por lo que es necesaria para el área de métodos, el procesamiento interno de la JVM o la optimización (como JIT). almacenamiento en caché de código compilado) La memoria, cada estructura de clase (como el grupo de constantes de tiempo de ejecución, datos de campos y métodos) y el código de métodos y constructores están en memoria no de montón
Asignación de memoria de montón
JVM La asignación de memoria inicial se especifica mediante -Xms y el valor predeterminado es 1/64 de la memoria física. La asignación de memoria máxima de la JVM se especifica mediante -Xmx y el valor predeterminado es 1/4 de la memoria física; memoria Cuando la memoria disponible del montón predeterminada es inferior a 40, la JVM aumentará el montón hasta el límite máximo de -Xmx; cuando la memoria libre del montón sea superior a 70, la JVM reducirá el montón al límite mínimo de -. Xms, por lo tanto, el servidor generalmente establecerá -Xms y -Xmx iguales para evitar ajustar el tamaño del montón después de GC.
Asignación de memoria no dinámica
JVM usa -XX:PermSize para establecer el valor inicial de la memoria no dinámica (el valor predeterminado es 1/64 de la memoria física) y usa XX: MaxPermSize para establecer el tamaño máximo de la memoria no dinámica (el valor predeterminado es 1/4 de la memoria física).
Límite de memoria JVM (valor máximo)
En primer lugar, la memoria JVM está limitada a la memoria física máxima real (¡tonterías! Jaja, suponiendo que la memoria física no esté limitada, el). Memoria JVM máxima El valor depende mucho del sistema operativo. En pocas palabras, aunque un procesador de 32 bits puede controlar 4 GB de espacio de memoria, el sistema operativo específico dará límites, que generalmente son 2 GB-3 GB (generalmente 1,5G-2G para Windows y 2G-3G para Linux). en procesadores de 64 bits.
2. ¿Por qué Eclipse puede iniciarse en algunas máquinas pero no en otras después de configurar -Xmx y -XX:MaxPermSize en 512M?
A través de la introducción anterior a la administración de memoria JVM, hemos aprendido que la memoria JVM contiene dos tipos de memoria: memoria de montón y memoria no de montón. Además, la memoria máxima de la JVM depende primero de la memoria real. la memoria física y el sistema operativo.
1) El valor de -Xms en el parámetro es mayor que -Xmx, o el valor de -XX:PermSize es mayor que -XX:MaxPermSize
2) La suma; de -Xmx y -XX:MaxPermSize Excede el límite máximo de memoria de la JVM, como el límite máximo de memoria del sistema operativo actual o la memoria física real. Hablando de memoria física real, es importante tener en cuenta que si tiene 1024 MB de RAM, es poco probable que pueda usar 1024 MB de RAM en un sistema real porque parte de ella está ocupada por el hardware.
3. ¿Por qué Eclipse no puede ejecutar la configuración correspondiente después de escribir los parámetros anteriores en el archivo eclipse.ini?
Entonces, ¿por qué funciona el mismo parámetro en un acceso directo o línea de comando, pero no en el archivo eclipse.ini? Esto se debe a que no seguimos las reglas de eclipse.ini:
Si hay espacios en medio del parámetro en forma de "valor del proyecto", debe escribirse en una nueva línea; si hay espacios en el valor, debe escribirse entre comillas dobles. Por ejemplo, usamos el parámetro -vm C:\Java\jre1.6.0\bin\javaw.exe para configurar la máquina virtual. Deberíamos escribir esto en el archivo eclipse.ini:
-vm.
C:\Java\jre1.6.0\bin\javaw.exe
Según el contenido anterior. El último parámetro en eclipse.ini se puede escribir así:
-vmargs
-Xms128M
-Xmx512M
-XX: PermSize =64M
-XX: MaxPermSize=128M
Los resultados de ejecución reales se pueden ver a través del botón "Detalles de configuración" en la ventana "Ayuda" - "Acerca del SDK de Eclipse" en Eclipse. Los resultados reales de la ejecución se pueden ver a través del botón "Detalles de configuración" en la ventana "Ayuda" - "Acerca del SDK de Eclipse" en Eclipse.
Además, cabe señalar que el archivo eclipse.ini en el paquete comprimido de Eclipse contiene el siguiente contenido:
-showsplash
org.eclipse. plataforma
p>--launcher.XXMaxPermSize