Что ж, если это что-то не так, я хорошо справляюсь со своими методами и кеширую результаты подвыражений. Спасибо!

отаю над высокопроизводительным Android-приложением (игрой), и хотя сначала я пытаюсь написать код для удобства чтения, мне нравится держать в голове картину того, что происходит под капотом. С C ++ я разработал довольно хорошую интуицию о том, что компилятор будет и не будет делать для меня. Я пытаюсь сделать то же самое для Java / Android.

Отсюда и этот вопрос. Я мог найти очень мало об этой теме в Интернете. Будет ли компилятор Java, конвертер Dalvik (dx) и / или JITter (на Android 2.2+) выполнять оптимизации, подобные следующим?

Метод встраивания. При каких условиях?private методы всегда можно безопасно встроить; это будет сделано? Как насчетpublic final методы? Методы на объектах других классов?static методы? Что если тип объекта во время выполнения может быть легко определен компилятором? Должен ли я объявить методы какfinal или жеstatic где это возможно?

Устранение общего подвыражения. Например, если я получу доступsomeObject.someField дважды, поиск будет выполнен только один раз? Что если это вызов геттера? Что делать, если я использую некоторое арифметическое выражение дважды; будет ли он оцениваться только один раз? Что, если я использую результат некоторого выражения, значение которого, как я знаю, не изменится, в качестве верхней границыfor цикл?

Проверка границ при поиске в массиве. Будет ли инструментальная цепь устранять это в определенных условиях, таких как архетипическиеfor цикл?

Значение встраивания. Будет ли доступ к некоторымpublic static final int всегда быть в курсе? Даже если они в другом классе? Даже если они в другой упаковке?

Отраслевой прогноз. Насколько большая проблема это даже? Является ли ветвление большим ударом по производительности на типичном устройстве Android?

Простая арифметика. БудетsomeInt * 2 заменить наsomeInt << 1?

Etcetera ...

Ответы на вопрос(3)

Ваш ответ на вопрос