Краткий ответ: Нет. Компилятор исходного кода не заменит умножение на два с битовым сдвигом.
Длинный ответ: Нет, потому что он не может знать, быстрее ли сдвиг бит, чем умножение на платформе, в которой в конечном итоге будет выполняться код. Таким образом, вопрос должен заключаться в том, что конкретная виртуальная машина заменит умножение битовым сдвигом, и это, вероятно, произойдет. Я немного поэкспериментировал с этим, чтобы оптимизировать блок кода, и интересно, что горячая точка Sun демонстрирует здесь другое поведение, в зависимости от того, работает программа на AMD или на процессоре Intel (по крайней мере, с тестированными процессорами). В любом случае умножение со степенью двойки заменяется битовым сдвигом, но для умножения со степенью двух +/- 1 (3, 5, 7, 9, 15, 17, ...) Hotspot будет генерировать сдвиг битов и сложение или вычитание для процессоров Intel, одновременно генерируя умножение для процессоров AMD, поскольку процессор AMD выполняет умножение намного быстрее, чем процессор Intel. Конечно, возможно, что это поведение отличается в разных моделях процессоров от каждого поставщика.
Если вам интересно узнать, что на самом деле делает виртуальная машина, весьма полезно получить отладочную сборку jdk7 и включить дампы кода ассемблера, сгенерированного компилятором Hotspot.