javac
имеет интересную опцию -O
:
Оптимизирует скомпилированный код путем вложения статических, конечных и частных методов. Обратите внимание, что ваши классы могут иметь больший размер.
Этот вариант кажется не популярным (скрытым?), я только что открыл его сегодня, на CodeCup 2014 page.
-O
не упоминается в официальной документации и в man javac
... Странно.
В принятом ответе на аналогичный question мы можем прочитать, что:
Оптимизация в Java в основном выполняется компилятором JIT во время выполнения. Следовательно, нет смысла пытаться научить его оптимизировать определенный (во время создания только байт-кода). JIT почти наверняка примет правильные решения на месте, зная, что точная окружающая среда и наблюдение за фактическими определенные части вашего кода.
Мой вопрос:
Должен ли я всегда использовать параметр -O
или нет? Другими словами, код всегда работает быстрее с -O
или вообще не имеет значения?
Возможно, размер классов может увеличиться настолько, что общая производительность снизится? Или JVM будет делать inlining так или иначе, чтобы лучше оставить это для этого?
Аналогичная история была с флагом gcc -O3
.