Что такое CompileThreshold, Tier2CompileThreshold, Tier3CompileThreshold и Tier4CompileThreshold?

HotSpot многоуровневая компиляция использует интерпретатор, пока порог invocations (для методов) или итераций (для циклов) не запускает компиляцию клиента с помощью self -profiling. Компиляция клиента используется до тех пор, пока другой порог вызовов или итераций не вызовет компиляцию сервера.

Печать флагов HotSpot показывает следующие значения флага с -XX: + TieredCompilation.

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

Слишком много флагов только для компилятора клиента и сервера. Какие компиляторы контролируются этими флагами? Если не клиент и сервер, какова цель дополнительных компиляторов?

В этом случае игнорируются CompileThreshold и Tier2CompileThreshold? Что контролирует Tier3CompileThreshold при компиляции клиента? Что контролирует Tier4CompileThreshold при компиляции сервера?

Ответы

Ответ 1

Комментарии в advancedThresholdPolicy.hpp обсуждают различные уровни компилятора и пороговые значения. См. Этот файл для более глубокого обсуждения.

Система поддерживает 5 уровней выполнения:

  • Уровень 0 - интерпретатор
  • Уровень 1 - C1 с полной оптимизацией (без профилирования)
  • Уровень 2 - C1 с счетчиками invocation и backedge
  • Уровень 3 - C1 с полным профилированием (уровень 2 + MDO)
  • Уровень 4 - C2

C1 - клиентский компилятор. C2 является компилятором сервера.

В общем случае компиляция идет: 0 → 3 → 4. Атипичные случаи используются на основе длин очереди C1 и C2. Уровень 2 используется, когда длина очереди С2 слишком велика, чтобы способ мог выполнять примерно на 30% быстрее, пока С2 не сможет обработать информацию профилирования. Если метод определяется как тривиальный, то он скомпилирован с уровнем 1, так как он будет генерировать тот же код, что и уровень 4.

Пороги динамически корректируются в зависимости от длины очередей C1 и C2.