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?