Red de conocimientos turísticos - Conocimientos sobre calendario chino - Un parámetro que puede mejorar el rendimiento de ejecución de JVM

Un parámetro que puede mejorar el rendimiento de ejecución de JVM

Cuando se inicia el proceso JAVA, aunque podemos especificar un tamaño de memoria apropiado para la JVM, el sistema operativo en realidad no asigna estas memorias a la JVM, sino que espera a que la JVM acceda a estas memorias. causará los siguientes problemas:

Configurar el parámetro -XX:+AlwaysPreTouch puede optimizar este problema, pero este parámetro también tiene efectos secundarios. ¿Qué tan grande es el impacto? Por favor sigue leyendo.

Los resultados de la comparación son los siguientes y la brecha aún es bastante grande:

Una de las razones por las que configurar este parámetro lleva tanto tiempo es que esta función no se procesó en paralelo antes de la versión JDK8 Por JDK9 Es paralelo. Puede hacer clic en el enlace Paralelizar memoria Pretouch: /browse/JDK-8157952

Después de configurar el parámetro -XX:+AlwaysPreTouch, ¿cuál es la causa principal de que el tiempo de inicio del proceso JVM sea varios órdenes de magnitud más lento? ?

Sin el parámetro -XX:+AlwaysPreTouch configurado, es decir, por defecto, el montón declarado por el parámetro JVM -Xms solo se asigna en la memoria virtual, no en la memoria física: se asigna como un almacenamiento interno. estructuras de datos para evitar que otros procesos utilicen esta memoria. Estas páginas de memoria no se asignan en la memoria física hasta que se accede a ellas. Cuando la JVM necesita memoria, el sistema operativo asignará páginas de memoria según sea necesario.

Después de configurar el parámetro -XX:+AlwaysPreTouch, la JVM escribe '0' en cada byte en la memoria del montón especificada por -Xms. la memoria virtual además, también estará asignada en la memoria física. Y dado que el comportamiento táctil es de un solo subproceso, ralentizará el inicio del proceso JVM. Por lo tanto, elija reducir el tiempo de primer acceso posterior para cada página de caché o elija reducir el tiempo de inicio del proceso JVM, lo cual es una compensación.

Bajo la premisa de G1, incluso si el parámetro -XX:+AlwaysPreTouch está configurado, la JVM ignorará este parámetro, lo que tiene el mismo efecto que si no hubiera configuración. La versión 8u60 ha solucionado este problema. Para obtener más detalles, haga clic en el enlace: G1 ignora AlwaysPreTouch: /browse/JDK-8067469, como se muestra a continuación:

Reimpreso del blog de A Fei

.