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