2012-09-12 25 views
10

que tienen debajo de las opciones de memoria configurados:Java GC Concepto: CMSInitiatingOccupancyFraction

MEM_OPTS exportación = "- Xmx2560m -Xms2560m -XX: NewSize = 786m -XX: MaxNewSize = 786m -XX: + UseTLAB -XX: MaxPermSize = 512m "

parámetros GC son como a continuación:

GC1_OPTS exportación =" - XX: + UseConcMarkSweepGC -XX: + UseParNewGC -XX: CMSInitiatingOccupancyFraction = 50 -XX: + CMSPermGenSweepingEnabled -XX: + CMSClassUnloadingEnabled -XX: + CMSParallelRemarkEnabled -XX: + UseAdaptiveGCBoundary " exportar GC2_OPTS = "- XX: + ExplicitGCInvokesConcurrent"

Me gustaría saber, cuándo se ejecutará CMS. Se ejecutará después del 50% de 2560 MB o se ejecutará después del 50% de 512 MB de memoria.

¿Cuál es el concepto?

Mi memoria Heap total sería = 2560 + 786 + 512 MB .... ¿no? o "-XX: NewSize = 786m -XX: MaxNewSize = 786m" es para NON Heap. Explica el concepto.

Respuesta

22

Ninguno. Será elegible para ejecutarse después de que la ocupación de la generación anterior alcance el 50%, donde el tamaño de la generación anterior es el tamaño del montón menos el tamaño de la nueva generación: 2560m - 786m = 1792m, entonces eso sería después del la vieja generación alcanza los 896m. Pero ese no es siempre el único parámetro. Es posible que desee agregar -XX: + UseCMSInitiatingOccupancyOnly si desea que se convierta en el único parámetro (aunque en mi experiencia, CMS realmente se desencadena en el umbral, incluso sin él).

Para resumir:

  • -Xmx es la memoria de pila total de
  • -XX:NewSize/-XX:MaxNewSize es el rango del tamaño de la nueva generación en el interior de ese montón
  • La diferencia es el rango del tamaño de la generación anterior
  • -XX:PermSize/-XX:MaxPermSize es el rango del tamaño de la generación permanente, que es la memoria que no es de montón
+0

gracias por la explicación clara. – VJS