Оптимизация компилятора Java JIT для троичного оператора

#java #eclipse #ternary-operator #jit

#java #eclipse #троичный оператор #jit

Вопрос:

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

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

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

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

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

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

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

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

Комментарии:

1. JIT-компилятор точно в срок (JIT) работает с байт-кодом, а не с исходным кодом, и является частью виртуальной машины Java (например, HotSpot или OpenJ9 ). Даже байт-код, созданный компилятором javac Eclipse или из исходного кода, может отличаться из-за разной оптимизации. Не могли бы вы сказать, какой именно компилятор вы имеете в виду?

2. Вы можете указать виртуальной машине регистрировать любой jit: ing и посмотреть сами. Обратите внимание, что нет никаких гарантий, что способ реализации не изменится со временем. Для получения дополнительной информации смотрите Здесь : oracle.com/technetwork/articles/java /…

3. И, кстати, в первом фрагменте кода name это фактически конечная переменная, а во втором фрагменте нет.

Ответ №1:

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

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

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

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

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

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

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

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

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