Есть ли разница во времени выполнения следующих двух фрагментов?есть разница во времени выполнения:
SNIPPET 1:
for (Object obj : collection) {
step1(obj);
step2(obj);
step3(obj);
}
SNIPPET 2:
for (Object obj : collection) {
step1(obj);
}
for (Object obj : collection) {
step2(obj);
}
for (Object obj : collection) {
step3(obj);
}
В зависимости от реализации «step1», «step2» и «step3» компилятор может скомпилировать последний тот же (байтовый) код как первый. Но почему бы тебе не разойтись? – Stephan202
Нет, это не так. Вызовы выполняются в разных порядках. Если объектами являются a, b, c и т. Д. В первом примере вызовы являются a1, a2, a3, b1, b2, b3 и т. Д., Но они являются a1, b1, a2, b2, a3, c3 во втором примере. – FogleBird
У них такой же Big-O, но в отличие от большинства претензий ниже, невозможно знать, что будет быстрее во время выполнения, не зная, что делают шаги step1, step2 и step3. Когерентность кодового кеша, согласованность кэша данных, точность предсказания отрасли ... любое количество вещей, которые могут изменить производительность во время выполнения. Сроки сами по себе являются единственным способом «знать», и даже в этом случае результаты по-прежнему зависят от вашего оборудования. –