El argumento -Xmx
define el tamaño máximo de memoria que el montón puede alcanzar para la JVM. Debe conocer bien su programa y ver cómo funciona bajo carga y establecer este parámetro en consecuencia. Un valor bajo puede causar OutOfMemoryExceptions o un rendimiento muy bajo si la memoria del montón de su programa está alcanzando el tamaño máximo de almacenamiento dinámico. Si su programa se ejecuta en un servidor dedicado, puede establecer este parámetro más alto porque no afectará a otros programas.
El argumento -Xms
establece el tamaño de la memoria del montón inicial para la JVM. Esto significa que cuando inicie su programa, la JVM asignará esta cantidad de memoria al instante. Esto es útil si su programa consumirá una gran cantidad de memoria de almacenamiento desde el principio. Esto evita que la JVM aumente constantemente el montón y puede obtener algún rendimiento allí. Si no sabe si este parámetro lo ayudará, no lo use.
En resumen, este es un compromiso que debe decidir basado solo en el comportamiento de memoria de su programa.
¿Su pregunta se refieren a algún problema en el mundo real o es sólo una cuestión teórica? Porque si tiene esa cantidad de RAM en un sistema de 64 bits, puede considerar cambiar sus algoritmos para aprovecharlo, p. Ej. leer/mapear toda la gran entrada.txt en la memoria y realizar operaciones sobre eso. – akarnokd
La respuesta a este tipo de preguntas siempre es "Hacer un punto de referencia y averiguar". –
Le pregunté al mantenedor del paquete JVM y dijo: "En Linux, no estoy seguro de que Xms lo haga a menos que tenga una configuración extraña. Tal vez lo asigne sin MAP_NORESERVE solo para asegurarse de que la RAM realmente está allí. Pero dudo eso." –