¡Finalmente!
A partir de Java 8u191 ahora tiene las opciones:
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
que se puede usar para dimensionar el montón como un porcentaje de la RAM física utilizable. (que es lo mismo que la RAM instalada menos lo que usa el núcleo).
Consulte las Notas de la versión de Java8 u191 para obtener más información. Tenga en cuenta que las opciones se mencionan bajo un encabezado de Docker, pero de hecho se aplican si se encuentra en el entorno de Docker o en un entorno tradicional.
El valor predeterminado para MaxRAMPercentage
es 25%. Esto es extremadamente conservador.
Mi propia regla: si su host está más o menos dedicado a ejecutar la aplicación java dada, entonces puede aumentar drásticamente sin problemas. Si está en Linux, solo ejecuta daemons estándar y ha instalado RAM desde alrededor de 1 Gb o más, entonces no dudaría en usar el 75% para el montón de JVM. Nuevamente, recuerde que este es el 75% de la RAM disponible , no la RAM instalada . Lo que queda son los otros procesos de aterrizaje de usuario que pueden ejecutarse en el host y los otros tipos de memoria que necesita la JVM (por ejemplo, para la pila). En conjunto, esto generalmente encajará bien en el 25% que queda. Obviamente, con aún más RAM instalada, el 75% es una apuesta cada vez más segura. (Me gustaría que la gente de JDK hubiera implementado una opción en la que podría especificar una escalera)
Establecer la MaxRAMPercentage
opción se ve así:
java -XX:MaxRAMPercentage=75.0 ....
Tenga en cuenta que estos valores porcentuales son de tipo 'doble' y, por lo tanto, debe especificarlos con un punto decimal. Obtiene un error un tanto extraño si usa "75" en lugar de "75.0".