1183 votos

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

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

2 votos

cuando se utiliza -Xmx128m -Xms64m puede alcanzar un pico alrededor de 275m RES mem, pero cuando se utiliza -Xmx128m -Xms128m puede alcanzar un pico alrededor de 550m RES mem Using Java 8 Lo mejor es estresar la GC y ver lo que sucede ...

0 votos

Sólo por curiosidad, los 275m y 550m - ¿Cómo se calcularon?

1558voto

hexacyanide Puntos 15723

El flag Xmx especifica la cantidad máxima de memoria asignable para el pool de la Máquina Virtual de Java (JVM), mientras Xms especifica el pool de asignación de memoria inicial.

Esto significa que la máquina virtual se pondrá en marcha con la cantidad Xms de memoria y será capaz de utilizar un máximo de Xmx cantidad de memoria. Por ejemplo, a partir de una JVM como la siguiente arrancará con 256 mb de memoria, y permitirá que el proceso use hasta 2048MB de memoria:

java -Xmx2048m -Xms256m

El flag de memoria también puede ser especificado en varios tamaños, como kilobytes, megabytes, etc.

-Xmx1024k
-Xmx512m
-Xmx8g

El parámetrp Xms no tiene ningún valor predeterminado, y Xmx típicamente tiene un valor predeterminado de 256 MB. Un uso común para estos indicadores es cuando se encuentra con un error java.lang.OutOfMemoryError.

Cuando se usan estos ajustes, tenga en cuenta que estos ajustes son para la pila de la JVM, y que la JVM puede y utilizará más memoria que sólo el tamaño asignado a la pila. De Documentación de Oracle:

Tenga en cuenta que la JVM utiliza más memoria que solo la pila (heap). Por ejemplo los métodos Java, pilas de subprocesos nativos y los handles son asignados en memoria separada de la del montón, así como de las estructuras de datos internas de la JVM.

14 votos

Así que es como cuando el uso de la memoria excede más allá de Xmx obtenemos jvm fuera de la excepción de la memoria.

66 votos

Sí, eso es correcto. Cuando trata de superar eso, aunque puede recoger la basura para intentar liberar suficiente memoria. Si todavía no hay suficiente memoria para satisfacer la solicitud y el montón ya ha alcanzado el tamaño máximo, un OutOfMemoryError se producirá.

2 votos

Cuando estoy utilizando el framework ForkJoin mi ordenador se bloquea porque está ocupando demasiada memoria. Es posible que en OpenJDK no haya un límite duro de memoria por defecto?

350voto

Rupesh Yadav Puntos 2721

Ejecute el comando java -X y obtendrá una lista de todos los -X opciones:

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 le ayude a entender Xms , Xmx así como muchas otras cosas que más importan. :)

22voto

Abner Niu Puntos 141

"Eso significa que tu JVM se iniciará con Xms cantidad de memoria y podrá utilizar un máximo de Xmx cantidad de memoria".

no es exacto !-Xms significa el tamaño inicial del Heap y -Xmx significa el tamaño máximo del Heap, no toda la memoria que usa la JVM.

19voto

Puede especificarlo en su IDE. Por ejemplo, para Eclipse en Configuraciones de ejecuciónArgumentos de la MV . Puede introducir -Xmx800m -Xms500m como

Enter image description here

0 votos

En RubyMine en OSX, está en el menú Ayuda > Editar opciones personalizadas de VM.

16 votos

Esto no responde a la pregunta. La pregunta es para qué sirven, no cómo se fijan.

0 votos

@Hearen ¿Cómo se puede hacer un sep en intellij?

14voto

Abhishek Aich Puntos 31

La pregunta en sí ya ha sido tratada anteriormente. Sólo hay que añadir parte de los valores por defecto.

Según http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

El valor por defecto de Xmx dependerá de la plataforma y de la cantidad de memoria disponible en el sistema.

8 votos

Para otras JVMs (además de JRockit), vea este post para determinar los valores Xmx/Xms por defecto de su JVM: stackoverflow.com/questions/4667483/

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X