Оптимизация циклов Oracle Java 7-8 Hotspot VM

Я хотел бы знать, какие оптимизации цикла выполняются Oracle Java 7 (или 8) Hotspot VM?

1 ответ

Решение
  • Исключение проверки диапазона - устраняет проверки диапазона для массивов, не зависящих от цикла. Посмотрите PhaseIdealLoop::do_range_check для деталей. Оптимизация контролируется флагом -XX:+RangeCheckElimination
  • Loop Peeling - отделяет первую итерацию от цикла и выполняет ее вне тела цикла. Смотрите удивительное описание здесь PhaseIdealLoop:: do_peeling. Эта оптимизация контролируется флагом -XX:PartialPeelLoop=true
  • Предикатирование цикла - устраняет проверки условий внутри тела цикла. В настоящее время была применена оптимизация предиката цикла для удаления проверки диапазона массива и проверки инварианта цикла (например, проверки на нуль и проверки массива). Предикация петли контролируется -XX:+UseLoopPredicate, Посмотрите код PhaseIdealLoop::loop_predication_impl
  • Развертывание петли - используется в качестве первого шага параллелизма на уровне суперслов. Смотрите PhaseIdealLoop:: do_unroll. Развертывание цикла контролируется следующими свойствами: -XX:LoopMaxUnroll=16 а также -XX:LoopUnrollMin=4
  • Заполнение массива - заменяет любые шаблоны заполнения интрисками. Смотрите PhaseIdealLoop:: do_intrinsify_fill. Опция JVM -XX:+OptimizeFill
  • Векторизация - заменяет инициализацию, копирование и арифметику массива векторными операциями в развернутых циклах. Компилятор Hotspot реализует концепцию параллелизма на уровне суперслов в superword.cpp. Смотрите также опцию JVM -XX:+UseSuperWord
Другие вопросы по тегам