LINUX.ORG.RU

История изменений

Исправление izzholtik, (текущая версия) :

Фигня в том, что ТС даже приблизительно не понимает, как работает то, что он тестирует, поэтому все его тесты - шлак.

Во-первых, for (как и foreach, лул) компилируется в совершенно разный код в зависимости от аргумента - для массива один, для интерфейса другой, для класса третий. ТС в своих тестах покрывает только один вариант.

Во-вторых, for полагается на итератор переданного объекта, соответственно, ТС замеряет производительность не цикла, а одной из библиотечных реализаций итератора.

В-третьих, foreach - это не конструкция языка, а метод, встроенный добрыми дядями в ArrayList. У разных коллекций он может работать совершенно по-разному. Кроме того, он использует всё тот же итератор (а ещё неявно созданный Consumer), так что по факту ТС замеряет скорость работы одной из библиотечных коллекций.

Ну и да, на разных JVM, ОС и платформах один и тот же байткод может совершенно по-разному JIT'иться и работать с разной скоростью.

Так что специально для ТС повторяю: либо

Читайте байткод jvm

, благо тулза для его просмотра есть в JDK из коробки, либо вон из профессии.

Исправление izzholtik, :

Фигня в том, что ТС даже приблизительно не понимает, как работает то, что он тестирует, поэтому все его тесты - шлак.

Во-первых, for (как и foreach, лул) компилируется в совершенно разный код в зависимости от аргумента - для массива один, для интерфейса другой, для класса третий. ТС в своих тестах покрывает только один вариант.

Во-вторых, for полагается на итератор переданного объекта, соответственно, ТС замеряет производительность не цикла, а одной из библиотечных реализаций итератора.

В-третьих, foreach - это не конструкция языка, а метод, встроенный добрыми дядями в ArrayList. У разных коллекций он может работать совершенно по-разному. Кроме того, он использует всё тот же итератор (а ещё неявно созданный Consumer), так что по факту ТС замеряет скорость работы одной из библиотечных коллекций.

Ну и да, на разных JVM, ОС и платформах один и тот же байткод может совершенно по-разному JIT'иться и работать с разной скоростью.

Так что специально для ТС я повторя: либо

Читайте байткод jvm

, благо тулза для его просмотра есть в JDK из коробки, либо вон из профессии.

Исходная версия izzholtik, :

Фигня в том, что ТС даже приблизительно не понимает, как работает то, что он тестирует, поэтому все его тесты - шлак.

Во-первых, for (как и foreach, лул) компилируется в совершенно разный код в зависимости от аргумента - для массива один, для интерфейса другой, для класса третий. ТС в своих тестах покрывает только один вариант.

Во-вторых, for полагается на итератор переданного объекта, соответственно, ТС замеряет производительность не цикла, а одной из библиотечных реализаций итератора.

В-третьих, foreach - это не конструкция языка, а метод, встроенный добрыми дядями в ArrayList. У разных коллекций он может работать совершенно по-разному. Кроме того, он использует всё тот же итератор (а ещё неявно созданный Consumer), так что по факту ТС замеряет скорость работы одной из библиотечных коллекций.

Так что специально для ТС я повторя: либо

Читайте байткод jvm

благо тулза для его просмотра есть в JDK из коробки, либо вон из профессии.