Оптимизация компилятора Java JIT для троичного оператора - PullRequest
1 голос
/ 17 апреля 2019

При использовании троичного оператора очень удобно писать код вроде

String name = employee.getName() != null ? employee.getName() : "";

чем (в большинстве случаев) более эффективный код, такой как

String name = employee.getName();
if (name == null) {
    name = "";
}

Q1. Мне интересно узнать, как компиляторы JIT оптимизируют этот код.

Пытаясь найти ответ по интернету, хотя я нашел пару ссылок, но они не охватывали этот конкретный случай.

Я счастлив, даже если получу ответ

Q2. Самый простой способ узнать, как оптимизировать JIT-компиляторы. (Некоторый инструмент плагина для затмения.)

1 Ответ

2 голосов
/ 17 апреля 2019

Я собираюсь дать печально известный ответ «Переполнение стека»: «неправильный подход, сделай что-нибудь еще».

Почему бы не сделать это

То, что вы хотите сделать здесь, это называетсяmicrobenchmarking.Брайан Гетц написал длинный пост , почему это обычно плохая идея.Вот некоторые основные моменты:

  • Оптимизация зависит также от вашей ОС и оборудования
  • Для большинства приложений этот тип ускорений не имеет значения
  • Это действительно сложноизмерять только то, что вас интересует

Что делать вместо

Вы можете измерить свою заявку.Узкие места в вашем приложении можно найти с помощью таких инструментов, как visualvm .И тогда вы можете оптимизировать эту часть.Оптимизация обычно является чем-то креативным, например, использование кеша или масштабирование только определенной части системы.

Но вы действительно хотите делать микробенчмарки

В этом случае вы можете сделать следующие двавещи:

  • Прочитайте байт-код и попытайтесь угадать, что будет быстрее в вашей настройке (ОС + аппаратное обеспечение)
  • Используйте microbenchmark framework, представленный в Java.Это даст вам некоторые номера.Эти цифры будут по-прежнему зависеть от настроек и не имеют отношения к вашему приложению.Однако измерительная часть будет точной.
...