#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. Это даст вам некоторые цифры. Эти числа по-прежнему будут зависеть от настроек и не имеют отношения к вашему приложению. Однако измерительная часть будет точной.