java jit jvm-hotspot compiler-flags

java - ¿Qué controlan CompileThreshold, Tier2CompileThreshold, Tier3CompileThreshold y Tier4CompileThreshold?



jit jvm-hotspot (1)

Los comentarios en advancedThresholdPolicy.hpp discuten los diferentes niveles del compilador y los umbrales. Ver ese archivo para una discusión más profunda.

El sistema soporta 5 niveles de ejecución:

  • Nivel 0 - intérprete
  • Nivel 1 - C1 con optimización completa (sin perfiles)
  • Tier 2 - C1 con contadores de invocación y backedge
  • Nivel 3 - C1 con perfil completo (nivel 2 + MDO)
  • Nivel 4 - C2

C1 es el compilador del cliente. C2 es el compilador del servidor.

En el caso común, la compilación es: 0 → 3 → 4. Los casos atípicos se utilizan en función de las longitudes de cola C1 y C2. El nivel 2 se usa cuando la longitud de la cola de C2 es demasiado larga, por lo que el método puede ejecutarse aproximadamente un 30% más rápido hasta que el C2 pueda procesar la información del perfil. Si se determina que el método es trivial, entonces se compila con el Nivel 1 ya que producirá el mismo código que el Nivel 4.

Los umbrales se ajustan dinámicamente según la longitud de las colas C1 y C2.

La compilación en niveles de HotSpot utiliza el intérprete hasta que un umbral de invocaciones (para métodos) o iteraciones (para bucles) desencadena una compilación del cliente con auto-perfilado. La compilación del cliente se utiliza hasta que otro umbral de invocaciones o iteraciones active una compilación del servidor.

Los indicadores de impresión de HotSpot muestran los siguientes valores de indicador con -XX: + Nivel de compilación.

intx CompileThreshold = 10000 {pd product} intx Tier2CompileThreshold = 0 {product} intx Tier3CompileThreshold = 2000 {product} intx Tier4CompileThreshold = 15000 {product}

Hay demasiados indicadores para un compilador de cliente y servidor. ¿Qué compiladores están controlados por estas banderas? Si no es cliente y servidor, ¿cuál es el propósito de los compiladores adicionales?

¿Se ignoran CompileThreshold y Tier2CompileThreshold en este caso? ¿Qué controla Tier3CompileThreshold cuando se activa una compilación de cliente? ¿Qué controla Tier4CompileThreshold cuando se activa una compilación del servidor?