studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java jvm jvm-arguments java-opts

programacion - Opciones duplicadas de tiempo de ejecución de Java: ¿cuál es el orden de preferencia?



manual de programacion android pdf (5)

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 el analizador de argumentos java, me quejaría por argumentos contradictorios.

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 (opción Xms ): 128 mo 256 m?


Depende de la JVM, tal vez la versión ... tal vez incluso la cantidad de clips que tenga en su escritorio en ese momento. Puede que ni siquiera funcione. No hagas eso.

Si por alguna razón está fuera de tu control, compila y ejecuta esto de la misma manera que ejecutarías tu jar. Pero ten cuidado, confiar en el orden de las opciones es una muy mala idea.

public class TotalMemory { public static void main(String[] args) { System.out.println("Total Memory: "+Runtime.getRuntime().totalMemory()); System.out.println("Free Memory: "+Runtime.getRuntime().freeMemory()); } }


IBM JVM trata la instancia más a la derecha de un argumento como ganador. No puedo hablar con HotSpot, etc.

Hacemos esto ya que a menudo hay líneas de comando profundamente anidadas de los archivos de proceso por lotes donde las personas solo pueden agregar hasta el final, y quieren hacer de eso el ganador.


FTR, OpenJDK 1.7 también parece tomar el valor más a la derecha, al menos para -Xms.


Como siempre, verifique la implementación específica de su JVM local, pero esta es 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}

En este caso, verá que la segunda instancia del argumento (2G) es lo que tiene prioridad (al menos en 1.8) y esa también ha sido mi experiencia con la mayoría de las otras versiones modernas.