Я хотел бы знать, какие оптимизации циклов выполняет Oracle Java 7 (или 8) Hotspot VM?
Вопрос
Оптимизация циклов 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
Ответы
Ответ 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.
Похожие материалы
- Интегрируйте JWT в SpringBoot для реализации проверки токена (интеграция)
- Spring Security - Создание документов для правил авторизации
- Java: общедоступная, частная, защищенная
- Небезопасный пакет Java и его роль в оптимизированной производительности JVM Apache Spark
- Удаление во время итерации в Ruby?
- Различия в циклах в Ruby с использованием диапазона и времени