java linux - ¿Qué son los parámetros Xms y Xmx al iniciar JVM?




memory arguments (5)

Puedes especificarlo en tu IDE. Por ejemplo, para Eclipse en Ejecutar configuracionesArgumentos de VM . Usted ingresa -Xmx800m -Xms500m :

Esta pregunta ya tiene una respuesta aquí:

Por favor explique el uso de los parámetros Xms y Xmx en las JVM. ¿Cuáles son los valores por defecto para ellos?


El indicador Xmx especifica el grupo de asignación de memoria máximo para una máquina virtual Java (JVM), mientras que Xms especifica el grupo de asignación de memoria inicial.

Esto significa que su JVM se iniciará con Xms de memoria y podrá utilizar un máximo de Xmx de memoria. Por ejemplo, iniciar una JVM como la que se muestra a continuación la iniciará con 256 MB de memoria y permitirá que el proceso utilice hasta 2048 MB de memoria:

java -Xms256m -Xmx2048m

La marca de memoria también se puede especificar en varios tamaños, como kilobytes, megabytes, etc.

-Xmx1024k
-Xmx512m
-Xmx8g

El indicador Xms no tiene un valor predeterminado, y Xmx generalmente tiene un valor predeterminado de 256 MB. Un uso común de estos indicadores es cuando encuentra un java.lang.OutOfMemoryError .

Al usar estas configuraciones, tenga en cuenta que estas configuraciones son para el montón de la JVM, y que la JVM puede / usará más memoria que solo el tamaño asignado al montón. De la documentación de Oracle :

Tenga en cuenta que la JVM utiliza más memoria que solo el montón. Por ejemplo, los métodos Java, las pilas de hilos y los manejadores nativos se asignan en la memoria por separado del montón, así como las estructuras de datos internas de la JVM.


Ejecute el comando java -X y obtendrá una lista de todas las opciones -X :

C:\Users\Admin>java -X
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
-Xdiag            show additional diagnostic messages
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:<file>    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms<size>        set initial Java heap size.........................
-Xmx<size>        set maximum Java heap size.........................
-Xss<size>        set java thread stack size
-Xprof            output cpu profiling data
-Xfuture          enable strictest checks, anticipating future default
-Xrs              reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni       perform additional checks for JNI functions
-Xshare:off       do not attempt to use shared class data
-Xshare:auto      use shared class data if possible (default)
-Xshare:on        require using shared class data, otherwise fail.
-XshowSettings    show all settings and continue
-XshowSettings:all         show all settings and continue
-XshowSettings:vm          show all vm related settings and continue
-XshowSettings:properties  show all property settings and continue
-XshowSettings:locale      show all locale related settings and continue

Las opciones -X no son estándar y están sujetas a cambios sin previo aviso.

Espero que esto te ayude a entender Xms, Xmx y muchas otras cosas que importan más. :)



No, pero puedes emularlos muy fácilmente. Lo que en C ++ era:

public: void myFunction(int a, int b=5, string c="test") { ... }

En Java, será una función sobrecargada:

public void myFunction(int a, int b, string c) { ... }

public void myFunction(int a, int b) {
    myFunction(a, b, "test");
}

public void myFunction(int a) {
    myFunction(a, 5);
}

Anteriormente se mencionó que los parámetros predeterminados causaban casos ambiguos en la sobrecarga de funciones. Eso simplemente no es cierto, podemos ver en el caso de C ++: sí, quizás pueda crear casos ambiguos, pero este problema se puede manejar fácilmente. Simplemente no se desarrolló en Java, probablemente porque los creadores querían un lenguaje mucho más simple como C ++, si tenían razón, es otra pregunta. Pero la mayoría de nosotros no creemos que use Java debido a su simplicidad.





java memory-management parameters jvm