Оптимизация циклов 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