usegcoverheadlimit collection 2gb java performance jvm-arguments

collection - Acelera la compensación de las opciones de Java-Xms y-Xmx



usegcoverheadlimit (6)

  1. La asignación siempre depende de su sistema operativo. Si asigna demasiada memoria, podría terminar cargando porciones en el intercambio, que de hecho es lento.
  2. Si su programa se ejecuta más lento o más rápido depende de las referencias que la máquina virtual tiene que manejar y limpiar. El GC no tiene que pasar por la memoria asignada para encontrar objetos abandonados. Sabe que son objetos y la cantidad de memoria que asignan por mapeo de referencia. Así que barrer solo depende del tamaño de tus objetos. Si su programa se comporta de la misma manera en ambos casos, el único impacto en el rendimiento debería ser en el arranque de VM, cuando la VM intenta asignar memoria proporcionada por su sistema operativo y si utiliza el intercambio (que nuevamente conduce a 1.)

Dados estos dos comandos

UN:

$ java -Xms10G -Xmx10G myjavacode input.txt

SEGUNDO:

$ java -Xms5G -Xmx5G myjavacode input.txt

Tengo dos preguntas:

  1. Dado que el comando A reserva más memoria con sus parámetros, ¿correrá A más rápido que B?
  2. ¿Cómo -Xmx y -Xms afectan el proceso de ejecución y el resultado de mi programa?

Depende del GC que esté usando su Java. Los GC paralelos pueden funcionar mejor en configuraciones de memoria más grandes, aunque no soy un experto en eso.

En general, si tiene una memoria más grande, es menos frecuente que necesite ser GC-ed: hay mucho espacio para la basura. Sin embargo, cuando se trata de un GC, el GC tiene que trabajar en más memoria, que a su vez puede ser más lenta.


El argumento -Xmx define el tamaño máximo de memoria que el montón puede alcanzar para la JVM. Debe conocer bien su programa y ver cómo funciona bajo carga y establecer este parámetro en consecuencia. Un valor bajo puede causar OutOfMemoryExceptions o un rendimiento muy bajo si la memoria de almacenamiento dinámico de su programa está alcanzando el tamaño máximo de almacenamiento dinámico. Si su programa se ejecuta en un servidor dedicado, puede establecer este parámetro más alto porque no afectará a otros programas.

El argumento -Xms establece el tamaño de la memoria del montón inicial para la JVM. Esto significa que cuando inicie su programa, la JVM asignará esta cantidad de memoria al instante. Esto es útil si su programa consumirá una gran cantidad de memoria de almacenamiento desde el principio. Esto evita que la JVM aumente constantemente el montón y puede obtener algún rendimiento allí. Si no sabe si este parámetro lo va a ayudar, no lo use .

En resumen, este es un compromiso que debe decidir basado solo en el comportamiento de la memoria de su programa.


Es difícil decir cómo la asignación de memoria afectará su velocidad. Depende del algoritmo de recolección de basura que utiliza la JVM. Por ejemplo, si su recolector de basura necesita hacer una pausa para hacer una colección completa, entonces si tiene 10 más memoria de la que realmente necesita, el recolector tendrá 10 basura más para limpiar.

Si está utilizando java 6, puede usar la consola jconsole (en el directorio bin de jdk) para adjuntarla a su proceso y observar cómo se comporta el recopilador. En general, los coleccionistas son muy inteligentes y no necesitarás hacer ningún ajuste, pero si tienes una necesidad, hay numerosas opciones que tienes para afinar aún más el proceso de recopilación.


He descubierto que, en algunos casos, demasiada memoria puede ralentizar el programa.

Por ejemplo, tenía un motor de transformación basado en hibernación que comenzó a funcionar lentamente a medida que aumentaba la carga. Resultó que cada vez que recibimos un objeto del archivo db, hibernate revisaba la memoria en busca de objetos que nunca volverían a usarse.

La solución fue desalojar los objetos viejos de la sesión.

Stuart


> C:/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 -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.

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

(copiar pegar)