|
|
Publicado en 14/8/2017 16:49:22
|
|
|
|

El error ocurrió durante la inicialización de la máquina virtual No se pude reservar suficiente espacio para un montón de objetos de 3145728KB
Recientemente estoy trabajando en un programa para Java. Originalmente, siempre me ha gustado la gestión de memoria de Java, no hay que preocuparse por asignar memoria, solo asignar, el recogedor de basura recuperará la memoria por ti. Ahora el programa se desarrolla con una gran cantidad de datos y, por rapidez, voy a cargar toda la información en la memoria, lo que garantizará una respuesta rápida. Sigo contando la memoria repetidamente, pensando en mi propia cantidad de datos, que debería ser suficiente al principio (mi máquina tiene memoria 4G, aunque Windows reconoce 3,5G, pero debería estar bien comparado con mi volumen de datos actual).
Inesperadamente, el programa del primer experimento duró unas horas y se encontró con una Excepción por Falta de Memoria. Mirando mis propios ajustes de VM, configuré -Xms512M -Xmx1024M. Sin pensarlo, lo cambié directamente a -Xms512M -Xmx2048M, y el resultado fue que no pude reservar suficiente espacio para el montón de objetos. El programa no puede levantarse. Solo entonces me di cuenta de que aún había un límite en la memoria máxima original. Busqué en Internet y encontré muchos artículos que hablan de este tema. Por último, encontré el artículo más útil en el foro DEV2DEV de BEA
Aquí el moderador YuLimin hizo la prueba y llegó a la conclusión:
Versión de la empresa JVM Cliente de memoria máxima (mega) Servidor de memoria máxima (mega)
DOM 1.5.x 1492 1520
DOM 1.5.5 (Linux) 2634 2660
DOM 1.4.2 1564 1564
SUN 1.4.2 (Linux) 1900 1260
IBM 1.4.2(Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902
Ahora JDK1.6.0_05 uso, lo he probado. Lo más importante en el estado del cliente es que mi JDK no reconoce el parámetro -Server y no puede probar el estado del servidor. Las estimaciones son más o menos las mismas.
DOM 1.6.0 1442 N/d
Parece que es imposible usar una gran memoria en Java. Y el dicho general es que si la memoria es demasiado grande, el tiempo de recogida de basura será largo. Esto también es comprensible, generalmente se recopila cuando la memoria no es suficiente, la memoria de escaneo 2G es, por supuesto, mucho más lenta que la 1G, y hay más objetos de memoria, la relación estimada aumenta exponencialmente.
A continuación se adjuntan los métodos de prueba y los registros de prueba de YuLimin.
Método de prueba:Prueba con el comando java -XmxXXXXM -version en la línea de comandos, y luego aumentar gradualmente el valor de XXXX; si se ejecuta normalmente, significa que el tamaño de memoria especificado está disponible, de lo contrario se imprimirá un mensaje de error.
Prueba la memoria máxima soportada de la JVM y luego establece las variables de entorno en el sistema
Nombre de la variable: _JAVA_OPTIONS Valor: - Xmx1G
|
Anterior:Se utiliza el plugin de pantalla completa de jQuery "jQuery Fullscreen Plugin"Próximo:La diferencia entre los certificados SSL, OV, DV y EV
|