studio - ¿Cómo aumentar la memoria del montón de Java de forma permanente?
visual studio installer (4)
Tengo un problema con la memoria del montón java. Desarrollé una aplicación de servidor de cliente en java que se ejecuta como un servicio de Windows que requiere más de 512 MB de memoria. Tengo 2 GB de RAM, pero cuando ejecuto mi aplicación, se produce una excepción.
Error de memoria insuficiente: espacio de almacenamiento dinámico de Java
pero ya he establecido el tamaño del montón (máximo 512 MB) en el panel de control de Java y todavía me sale el mismo error. No puedo establecer el tamaño del montón a través de la línea de comandos porque mi aplicación se ejecuta como un servicio de Windows. ¿Cómo puedo aumentar el tamaño del montón predeterminado?
Esto funcionó para mí:
export _JAVA_OPTIONS = "- Xmx1g"
Es importante que no tengas espacios porque para mí no funcionó. Yo sugeriría simplemente copiar y pegar. Entonces corrí:
java -XshowSettings: vm
y te dirá:
Recogido _JAVA_OPTIONS: -Xmx1g
La máquina virtual de Java toma dos argumentos de línea de comando que establecen los tamaños de almacenamiento dinámico inicial y máximo: -Xms y -Xmx. Puede agregar una variable de entorno del sistema llamada _JAVA_OPTIONS y establecer los valores de tamaño de pila allí.
Por ejemplo, si desea un tamaño de pila máximo inicial de 512 Mb y 1024 Mb puede usar:
bajo Windows:
SET _JAVA_OPTIONS = -Xms512m -Xmx1024m
bajo Linux:
export _JAVA_OPTIONS="-Xms512m -Xmx1024m"
Es posible leer el tamaño del montón de JVM predeterminado mediante programación utilizando el método totalMemory () de la clase Runtime. Utilice el siguiente código para leer el tamaño de pila JVM.
public class GetHeapSize {
public static void main(String[]args){
//Get the jvm heap size.
long heapSize = Runtime.getRuntime().totalMemory();
//Print the jvm heap size.
System.out.println("Heap Size = " + heapSize);
}
}
Si necesita aumentar la memoria reservada, hay parámetros de VM -Xms y -Xmx, por ejemplo, -Xms512m -Xmx512m. También hay un parámetro -XX: MaxPermSize = 256m que cambia la memoria reservada para la generación permanente
Si su aplicación se ejecuta como servicio de Windows, en Panel de control -> Herramientas de administración -> Servicios puede agregar algunos parámetros de ejecución a su servicio
Tenga en cuenta que aumentar el tamaño del almacenamiento dinámico de Java después de java.lang.OutOfMemoryError: el espacio del almacenamiento dinámico de Java es a menudo solo una solución a corto plazo.
Esto significa que incluso si incrementa el tamaño predeterminado del montón de Java de 512 MB a 2048 MB, puede que reciba este error en algún momento si se trata de una pérdida de memoria. La pregunta principal es: ¿por qué recibe este error de OOM en primer lugar? ¿Es realmente un valor de Xmx demasiado bajo o simplemente un síntoma de otro problema?
Al desarrollar una aplicación Java, siempre es crucial entender su requisito de huella de memoria estática y dinámica desde el principio, esto ayudará a prevenir problemas OOM complejos más adelante. El tamaño adecuado de la configuración de JVM Xms y Xmx se puede lograr a través de la aplicación de perfiles y pruebas de carga.