xmx modify increase how change aumentar java jvm runtime heap

java - modify - Establecer el tamaño del almacenamiento dinámico de JVM en el tiempo de ejecución



java xmx (8)

De acuerdo con http://www.dreamincode.net/forums/showtopic96263.htm , no puede hacer esto en tiempo de ejecución, pero puede generar otro proceso con un tamaño de almacenamiento dinámico diferente.

¿Hay alguna manera de establecer el tamaño del almacenamiento dinámico desde un programa Java en ejecución?


El consenso puede ser que esto no sea posible, pero deberíamos analizar la fuente de JVM para ver cómo se puede controlar ergonómicamente. Sería muy agradable poder tener un agente JVMTI capaz de ajustar el tamaño de heap / perm / tenured / new / & c en línea / en tiempo de ejecución.

¿Qué haría esto? Permitiría a los agentes inferir ajustes de tamaño basados ​​en los objetivos de rendimiento o huella, que serán importantes al mover las JVM a la nube.


Me hice la misma pregunta a mí mismo. Y a diferencia de las respuestas anteriores, hay algo que puedo hacer para que mi aplicación aumente el tamaño máximo de JVM del montón. Si la aplicación es un servidor web en modo de clúster, podría iniciar una nueva instancia con el tamaño de almacenamiento mínimo / máximo modificado y la instancia inicial de apagado. Eso será especialmente simple en GlassFish donde tiene una instancia de administración separada de nodeAgent (instancia agrupada del servidor de aplicaciones) JVM.

Como muchas aplicaciones de JVM son aplicaciones web, creo que vale la pena conservarlas en este blog.


No.

Lo que puede hacer con una aplicación que tiene requisitos de montón muy variables es establecer su tamaño máximo de -Xmx dinámico muy alto con -Xmx y sintonizar -XX:MaxHeapFreeRatio y -XX:MinHeapFreeRatio para que la aplicación no se -XX:MinHeapFreeRatio en una gran cantidad de memoria cuando el montón se reduce (lo hace con la configuración predeterminada).

Pero tenga en cuenta que esto puede causar problemas de rendimiento cuando la memoria realmente utilizada por la aplicación varía de manera rápida y potente; en ese caso, es mejor que se quede con toda la memoria en lugar de devolvérsela al sistema operativo solo para reclamarla. nuevamente un segundo después. También es posible que desee juguetear con las opciones de GC para asegurarse de que el GC no deje demasiados objetos no reclamados por ahí, lo que tiende a hacer cuando hay mucho espacio para que el montón crezca, y que podría derrotar el objetivo de querer que el tamaño del montón se ajuste a las necesidades de la aplicación.


Puede modificar esas configuraciones cuando inicia su aplicación, pero una vez que la JVM está funcionando, esos valores no se pueden cambiar. Algo como esto:

java -Xms32m -Xmx512m FooBar

configurará el tamaño mínimo del almacenamiento dinámico en 32MB y el tamaño máximo del almacenamiento dinámico en 512MB. Una vez que están configurados, no puede cambiarlos dentro del programa en ejecución.


Puede usar la opción -mx al inicio (también conocida como -Xmx ). Este es el tamaño máximo que debería necesitar, por lo que no debería tener que configurarlo en un tamaño mayor que el que necesitará.

Sin embargo, una solución alternativa es hacer que main () verifique el tamaño máximo y reinicie Java si el tamaño máximo no es el deseado. es decir, comienza otro programa java y muere.


Si entiendo tu pregunta correctamente, estás tratando de cambiar el tamaño del montón en tiempo de ejecución . No veo ninguna razón por la que esto debería ser posible. Establezca el tamaño del -Xmx dinámico al inicio con la opción -Xmx JVM. También te aconsejo que configures la opción -Xms solo si es absolutamente necesario. Esta opción establece la cantidad inicial de memoria principal que se asigna para la JVM.

Debe saber cómo se comporta su aplicación en términos de memoria. Establezca el valor de -Xmx sabiamente. Si su aplicación es una especie de aplicación de servidor, puede establecer un valor superior, de lo contrario, puede poner en peligro su elección con otras aplicaciones posibles que se ejecutan en máquinas cliente y, por supuesto, con la memoria disponible.


java -Xmx500m al inicio solo