Introducción
Los parámetros de la JVM se utilizan para configurar la Máquina Virtual Java (JVM), que se encarga de ejecutar el bytecode de Java. Al configurar adecuadamente los parámetros de la JVM, podemos mejorar el rendimiento de las aplicaciones Java. En este laboratorio, aprenderemos cómo establecer algunos parámetros de la JVM comúnmente utilizados para optimizar el rendimiento de las aplicaciones Java.
Establecer memoria del montón
La memoria del montículo es el área de datos de tiempo de ejecución en la que se asignan los objetos Java. Podemos establecer el tamaño de la memoria del montículo con los parámetros -Xmx y -Xms.
-Xmx<tamaño del montículo>[unidad]: establece el tamaño máximo del montículo.-Xms<tamaño del montículo>[unidad]: establece el tamaño inicial del montículo.
Por ejemplo, para establecer el tamaño mínimo del montículo en 512MB y el tamaño máximo del montículo en 1GB, podemos utilizar el siguiente comando:
java -Xms512m -Xmx1g MyApp
Elegir recolectores de basura
La recolección de basura es el proceso de liberar la memoria ocupada por objetos que ya no son utilizados por la aplicación Java. La elección del recolector de basura puede tener un impacto significativo en el rendimiento de la aplicación. La JVM proporciona varios recolectores de basura, cada uno con sus fortalezas y debilidades.
-XX:+UseSerialGC: habilita el recolector de basura serial, que utiliza un solo hilo para la recolección de basura.-XX:+UseParallelGC: habilita el recolector de basura paralelo, que utiliza múltiples hilos para la recolección de basura.-XX:+UseParNewGC: habilita el recolector de basura concurrent-mark-sweep (CMS), que utiliza múltiples hilos para realizar la recolección de basura concurrente.-XX:+UseG1GC: habilita el recolector de basura Garbage-first (G1), que está diseñado para proporcionar tiempos de pausa consistentes y alta rendimiento.
Por ejemplo, para habilitar el recolector de basura paralelo, podemos utilizar el siguiente comando:
java -XX:+UseParallelGC MyApp
Registro de las actividades de recolección de basura
El registro de la recolección de basura nos permite monitorear el rendimiento del recolector de basura y ajustar los parámetros del recolector de basura según los requisitos de la aplicación. Podemos utilizar los siguientes parámetros para habilitar el registro de la recolección de basura:
-XX:+UseGCLogFileRotation: habilita la rotación de registros para los registros de recolección de basura.-XX:NumberOfGCLogFiles=<número de archivos de registro>: limita el número de archivos de registro para los registros de recolección de basura.-XX:GCLogFileSize=<tamaño del archivo><unidad>: especifica el límite de tamaño para los registros de recolección de basura.-Xloggc:[ruta al archivo gc.log]: especifica la ruta para los registros de recolección de basura.
Por ejemplo, para habilitar el registro de la recolección de basura y establecer la ruta del archivo de registro en /path/to/gc.log, podemos utilizar el siguiente comando:
java -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:/path/to/gc.log MyApp
Manejo del error de memoria insuficiente
Cuando la JVM se queda sin memoria, lanza un error de memoria insuficiente. Podemos utilizar los siguientes parámetros de la JVM para manejar este error:
-XX:+HeapDumpOnOutOfMemoryError: cuando ocurre el error de memoria insuficiente, la JVM escribirá un volcado de memoria en el disco.-XX:HeapDumpPath=<ruta al archivo de volcado de memoria>: especifica la ruta para el archivo de volcado de memoria.-XX:OnOutOfMemoryError=<comando>: cuando ocurre el error de memoria insuficiente, la JVM ejecutará el comando especificado.-XX:+UseGCOverheadLimit: la JVM utiliza esta opción para establecer un límite en la cantidad de tiempo dedicado a la recolección de basura.
Por ejemplo, para configurar la JVM para escribir un volcado de memoria en el archivo /path/to/heapdump.hprof cuando ocurre el error de memoria insuficiente, podemos utilizar el siguiente comando:
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof MyApp
Usar JVM de 64 bits
Podemos utilizar el parámetro -d para seleccionar la JVM de 32 bits o 64 bits. Por ejemplo, para utilizar la JVM de 64 bits, podemos utilizar el siguiente comando:
java -d64 MyApp
Compilar y ejecutar una aplicación Java con parámetros de JVM
Vamos a utilizar el programa HelloWorld.java para compilar y ejecutar la aplicación Java con los parámetros de la JVM que aprendimos en los pasos anteriores.
cd ~/proyecto
touch HelloWorld.java
touch HelloWorld.java
Ingrese el siguiente código:
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hola, Mundo!");
}
}
Guarde el archivo y salga. Ahora, compile y ejecute el código con el parámetro -Xmx:
javac HelloWorld.java
java -Xmx512m HelloWorld
Esto establece el tamaño máximo del montón en 512MB. Deberíamos ver la salida:
Hola, Mundo!
Compilar y ejecutar una aplicación Java con recolectores de basura
Ahora, vamos a compilar y ejecutar la aplicación Java con el recolector de basura paralelo:
java -XX:+UseParallelGC HelloWorld
Deberíamos ver la salida:
Hola, Mundo!
Compilar y ejecutar una aplicación Java con registro de recolección de basura
Ahora, vamos a compilar y ejecutar la aplicación Java con el registro de recolección de basura habilitado:
java -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:/ruta/al/gc.log HelloWorld
Esto establece la ruta del archivo de registro en /ruta/al/gc.log.
Compilar y ejecutar una aplicación Java con otros parámetros frecuentemente utilizados
Ahora, vamos a compilar y ejecutar la aplicación Java con los parámetros -XX:+UseStringDeduplication y -XX:MaxHeapFreeRatio:
java -XX:+UseStringDeduplication -XX:MaxHeapFreeRatio=70 HelloWorld
Esto habilita la deduplicación de cadenas y establece la proporción máxima de espacio de montón libre después de la recolección de basura en un 70%.
Resumen
En este laboratorio, aprendimos cómo establecer varios parámetros de la JVM para optimizar el rendimiento de las aplicaciones Java. Aprendimos cómo establecer el tamaño de la memoria del montón, elegir recolectores de basura, habilitar el registro de recolección de basura, manejar errores de memoria insuficiente, usar la JVM de 64 bits y establecer algunos otros parámetros frecuentemente utilizados. También aprendimos cómo compilar y ejecutar una aplicación Java con parámetros de la JVM.



