Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: El MarceОтветов: 1

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

  • Авторы компиляторов, возможно, могли бы... но я сомневаюсь, что они бы это сделали. В любом случае, если вам действительно нужно знать, вы всегда можете скачать исходное дерево OpenJDK и разобраться в этом самостоятельно. Stephen C 01.10.2015
  • Основными из них, вероятно, будут устранение мертвого кода, развертывание циклов и подъем переменных. assylias 01.10.2015
  • @ Близкие избиратели: В какой степени это требует стороннего ресурса? Посмотрите на текущий ответ. (Конечно, в нем много ссылок, но это только указатели на устойчивый ресурс (а именно, исходники OpenJDK), и предназначенные для дальнейших исследований). Marco13 03.10.2015
  • @ Близкие избиратели: я отредактировал свой вопрос 2 дня назад. Вы можете проверить это, пожалуйста? Спасибо El Marce 06.10.2015

javaloopsoptimizationjitjvm-hotspot

Ответы

Ответ 1 · рейтинг 27 · Ivan Mamontov

  • Устранение проверки диапазона - исключает проверку диапазона для массивов, не зависящих от циклов. См. PhaseIdealLoop: :do_range_check для подробностей. Оптимизация контролируется флагом -XX:+RangeCheckElimination
  • Очистка цикла - отделяет первую итерацию от цикла и выполняет ее за пределами тела цикла. См. замечательное описание здесь 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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы