titledborder - ¿Cómo se determina el tamaño predeterminado del montón de Java?
setborder java (7)
el valor predeterminado se elige en tiempo de ejecución según la configuración del sistema
Echa un vistazo a la page documentación page
Tamaño de pila predeterminado
A menos que los tamaños de almacenamiento dinámico iniciales y máximos se especifiquen en la línea de comandos, se calcularán según la cantidad de memoria en la máquina.
Tamaños inicial y máximo de almacenamiento predeterminado de JVM del cliente:
El tamaño de pila máximo predeterminado es la mitad de la memoria física hasta un tamaño de memoria física de 192 megabytes (MB) y, de lo contrario, una cuarta parte de la memoria física hasta un tamaño de memoria física de 1 gigabyte (GB) .
Tamaños inicial y máximo de almacenamiento predeterminado de JVM del servidor:
En las JVM de 32 bits, el tamaño de pila máximo predeterminado puede ser de hasta 1 GB si hay 4 GB o más de memoria física . En las JVM de 64 bits, el tamaño de pila máximo predeterminado puede ser de hasta 32 GB si hay 128 GB o más de memoria física
¿Qué ajustes de configuración del sistema influyen en el valor predeterminado?
Puede especificar los tamaños de almacenamiento dinámico inicial y máximo utilizando las marcas -Xms (tamaño de almacenamiento inicial) y -Xmx (tamaño de almacenamiento dinámico máximo). Si sabe cuánto necesita su aplicación para que funcione bien, puede configurar -Xms y -Xmx al mismo valor
Si omito la opción -Xmxn de la línea de comandos de Java, se utiliza un valor predeterminado. Según la documentación de Java, "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?
En los sistemas Windows, puede usar el siguiente comando para averiguar los valores predeterminados en el sistema donde se ejecutan sus aplicaciones.
java -XX: + PrintFlagsFinal -version | findstr HeapSize
Busque las opciones MaxHeapSize
(para -Xmx
) y InitialHeapSize
para -Xms
.
En un sistema Unix / Linux, puedes hacer
java -XX: + PrintFlagsFinal -version | grep HeapSize
Creo que la salida resultante es en bytes.
Ernesto tiene razón. Según el enlace que publicó [1]:
Configuración actualizada del montón de JVM del cliente
En la JVM del cliente ...
El tamaño de pila máximo predeterminado es la mitad de la memoria física hasta un tamaño de memoria física de 192 megabytes y, de lo contrario, una cuarta parte de la memoria física hasta un tamaño de memoria física de 1 gigabyte.
Por ejemplo, si su máquina tiene 128 megabytes de memoria física, entonces el tamaño máximo de almacenamiento dinámico es de 64 megabytes, y mayor o igual a 1 gigabyte de memoria física da como resultado un tamaño máximo de almacenamiento dinámico de 256 megabytes.
El tamaño máximo de almacenamiento dinámico no lo utiliza realmente la JVM a menos que su programa cree suficientes objetos para requerirlo. Se asigna una cantidad mucho menor, denominada tamaño de pila inicial, durante la inicialización de JVM. ...
- ...
- La ergonomía de la configuración del montón de JVM del servidor ahora es la misma que la del Cliente, excepto que el tamaño máximo predeterminado del montón para JVM de 32 bits es 1 gigabyte , que corresponde a un tamaño de memoria física de 4 gigabytes, y para JVM de 64 bits es de 32 gigabytes , correspondiente a un tamaño de memoria física de 128 gigabytes.
[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html
Esto se cambia con la actualización 18 de Java 6 .
Suponiendo que tenemos más de 1 GB de memoria física (bastante común en estos días), siempre es la cuarta parte de su memoria física.
Para IBM JVM, el comando es el siguiente:
java -verbose:sizes -version
Para obtener más información sobre el IBM SDK para Java 8: http://www-01.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/defaults.html?lang=en
Según la ergonomía del recolector de basura [Oracle] :
tamaño de pila inicial:
Más grande de 1/64 de la memoria física de la máquina en la máquina o algún mínimo razonable. Antes de J2SE 5.0, el tamaño de pila 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 de pila:
Menor de 1/4 de la memoria física o 1GB. Antes de J2SE 5.0, el tamaño de pila máximo predeterminado era de 64 MB. Puede anular este valor predeterminado utilizando la opción de línea de comandos -Xmx.
ACTUALIZAR:
Como lo señaló Tom Anderson en su comentario, lo anterior es para máquinas de clase servidor. Desde la ergonomía en la máquina virtual JavaTM 5.0 :
En la versión 5.0 de la plataforma J2SE, 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
con la 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 versión 1.4.2 de la plataforma J2SE, de forma predeterminada, se realizaron las siguientes selecciones
- tamaño inicial del montón de 4 Mbyte
- Tamaño máximo del montón de 64 Mbyte
Java 8 toma más de 1/6 de su memoria física para su Xmssize (tamaño mínimo de Heap) y menos de 1/4 de su memoria física para su -Xmxsize (tamaño máximo de Heap).
Puede verificar el tamaño predeterminado del montón de Java :
En Windows :
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?
Tu memoria física y tu versión de Java.