¿Cómo se determina el tamaño máximo predeterminado del montón de Java?

Resuelto Richard Dorman asked hace 13 años • 0 respuestas

Si omito la opción en la línea de comando de Java, se utilizará un valor predeterminado. Según la documentación de Java-Xmxn

"el valor predeterminado se elige en tiempo de ejecución según la configuración del sistema"

¿Qué ajustes de configuración del sistema influyen en el valor predeterminado?

Richard Dorman avatar Jan 12 '11 17:01 Richard Dorman
Aceptado

En Windows, puede utilizar el siguiente comando para conocer los valores predeterminados en el sistema donde se ejecutan sus aplicaciones.

java -XX:+PrintFlagsFinal -version | findstr HeapSize

Busque las opciones MaxHeapSize(para -Xmx) y InitialHeapSizepara -Xms.

En un sistema Unix/Linux, puedes hacer

java -XX:+PrintFlagsFinal -version | grep HeapSize

Creo que el resultado resultante está en bytes.

stones333 avatar Dec 14 '2012 01:12 stones333

Para Java SE 5: según la ergonomía del recolector de basura [Oracle] :

tamaño del montón inicial:

Mayor que 1/64 de la memoria física de la máquina o un mínimo razonable. Antes de J2SE 5.0, el tamaño del montón inicial predeterminado era un mínimo razonable, que varía según la plataforma. Puede anular este valor predeterminado utilizando la opción de línea de comandos -Xms.

tamaño máximo del montón:

Menor que 1/4 de la memoria física o 1 GB. Antes de J2SE 5.0, el tamaño máximo predeterminado del montón era 64 MB. Puede anular este valor predeterminado utilizando la opción de línea de comandos -Xmx.

ACTUALIZAR:

Como señaló Tom Anderson en su comentario, lo anterior es para máquinas de clase servidor. De Ergonomía en la Máquina Virtual JavaTM 5.0 :

En la plataforma J2SE versión 5.0, una clase de máquina denominada máquina de clase servidor se ha definido como una máquina con

  • 2 o más procesadores físicos
  • 2 o más Gbytes de memoria física

a excepción de las plataformas de 32 bits que ejecutan una versión del sistema operativo Windows. En todas las demás plataformas, los valores predeterminados son los mismos que los valores predeterminados para la versión 1.4.2.

En la plataforma J2SE versión 1.4.2 por defecto se realizaron las siguientes selecciones

  • tamaño de pila inicial de 4 Mbytes
  • tamaño máximo de almacenamiento dinámico de 64 Mbytes
dogbane avatar Jan 12 '2011 10:01 dogbane

Java 8 ocupa más de 1/64 de su memoria física para su Xmssize (Tamaño de montón mínimo) y menos de 1/4 de su memoria física para su -Xmxsize (Tamaño de montón máximo).

Puede comprobar el tamaño del montón de Java predeterminado de la siguiente manera:

En ventanas :

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

En Linux :

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

¿Qué ajustes de configuración del sistema influyen en el valor predeterminado?

La memoria física de la máquina y la versión de Java.

Sarat Chandra avatar Apr 12 '2017 11:04 Sarat Chandra

Esto se cambia en la actualización 18 de Java 6 .

Suponiendo que tenemos más de 1 GB de memoria física (bastante común hoy en día), siempre es 1/4 de su memoria física para la máquina virtual del servidor.

ernesto avatar Oct 30 '2012 06:10 ernesto