Есть ли оптимизация компилятора для методов size() для Collections в Java?
Рассмотрим следующий код:
for(int i=0;i<list.size();i++)
...some operation.....
Существует вызов метода size() для каждого i. Разве не лучше узнать размер и повторно использовать его? (У вызовов метода есть накладные расходы).
final int len = list.size()
for(int i=0;i<len;i++)
...some operation.....
Однако, когда я приурочил оба эти фрагмента кода, не было существенной разницы во времени, даже для я до 10000000. Я что-то пропустил?
Update1: Я понимаю, что размер не вычисляется снова, если коллекция не изменяется. Но должны быть некоторые накладные расходы, связанные с вызовом метода. Это тот случай, когда компилятор всегда строит их (см. Ответ Esko)?
Обновление 2: Мое любопытство подпитывается дальше. Из приведенных ответов я вижу, что хорошие компиляторы JIT часто связывают этот вызов функции. Но они все равно должны будут определить, была ли коллекция изменена или нет. Я не принимаю ответ в надежде, что кто-то даст мне указания относительно того, как это обрабатывается компиляторами.