Teniendo en cuenta la siguiente línea de comando
java -Xms128m -Xms256m myapp.jar
Qué configuración se aplicará a la memoria mínima de JVM (Xms
opción) : 128m o 256m ?
David Hergert
Como siempre, verifique la implementación específica de su JVM local, pero aquí hay una forma rápida de verificar desde la línea de comando sin tener que codificar.
> java -version; java -Xmx1G -XX:+PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
uintx MaxHeapSize := 2147483648 {product}
Así que verá en este caso, la segunda instancia del argumento (2G) es lo que tiene prioridad (al menos en 1.8) y esa ha sido mi experiencia con la mayoría de las otras versiones modernas también.
-
java -Xmx1G -XX:+PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize
de esta manera es más fácil deducir.– centeno
23 de abril de 2015 a las 9:28
IBM JVM trata la instancia más a la derecha de un argumento como ganadora. No puedo hablar con HotSpot, etc.
Hacemos esto porque a menudo hay líneas de comando profundamente anidadas de archivos por lotes donde las personas solo pueden agregar hasta el final y quieren que sea el ganador.
-
+1 por responder la pregunta en lugar de pontificar.
– JimN
22 de mayo de 2014 a las 3:04
-
Por cierto: ibm.com/support/knowledgecenter/SSYKE2_7.0.0/…
– Jorge Poveda
2 de agosto de 2016 a las 12:33
FTR, OpenJDK 1.7 también parece tomar el valor más a la derecha, al menos para -Xms.
-
+1 por responder la pregunta en lugar de pontificar.
– JimN
22 de mayo de 2014 a las 3:04
-
al igual que CSS, el último gana
– centeno
23 de abril de 2015 a las 9:30
¿Qué ajustes se aplicarán a la memoria mínima de JVM?
En las diversas versiones de Java enumeradas a continuación, el “ganador” es el valor más a la derecha en la lista de argumentos. Como otros han señalado, no es una buena idea confiar en esto, pero tal vez sea información útil para compartir de todos modos.
Java 1.8.0_172
~ $ java8
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
uintx MaxHeapSize := 4219469824 {product}
java 11.0.3
~ $ java11
java version "11.0.3" 2019-04-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
size_t MaxHeapSize = 4219469824 {product} {command line}
OpenJDK 12.0.1
~ $ java12
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
size_t MaxHeapSize = 4219469824 {product} {command line}
Adoptar OpenJDK 12.0.1
~ $ java12a
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 12.0.1+12)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 12.0.1+12, mixed mode, sharing)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
size_t MaxHeapSize = 4219469824 {product} {command line}
OpenJDK 13-ea
~ $ java13
openjdk version "13-ea" 2019-09-17
OpenJDK Runtime Environment (build 13-ea+22)
OpenJDK 64-Bit Server VM (build 13-ea+22, mixed mode, sharing)
~ $ java -Xmx1024m -Xmx4024m -XX:+PrintFlagsFinal Test 2>/dev/null | grep MaxHeapSize
size_t MaxHeapSize = 4219469824 {product} {command line}
-
+1 – mejor cuenta esos clips :-). En serio, no es ciencia espacial cambiar lo que sea que esté pasando esos argumentos ambiguos.
– Esteban C.
30 de abril de 2010 a las 0:33
-
estado intentando con diferente número de sujetapapeles. no puedo encontrar cambiar a la primera
– OganM
12 de junio de 2017 a las 20:08
Apuesto a que es el segundo. Los argumentos generalmente se procesan en el orden:
for( int i=0; i<argc; i++ ) {
process_argument(argv[i]);
}
Pero si estuviera escribiendo un analizador de argumentos de Java, me quejaría de los argumentos en conflicto.
C. Picotear
Mis experimentos muestran que toma el valor máximo de xmx
.
Así que si pasas -xmx4g -xmx1g
tomará 4t
y si pasas -xmx1g -xmx4g
todavía tomará 4g
.
No hay error tipográfico en cuestión. Las opciones Xms se usan dos veces a propósito. Este es el fondo de la pregunta.
– fabien7474
30 de abril de 2010 a las 8:23