Производительность потока Java 8 по сравнению с. Традиционные коллекции
Недавно вы приступили к работе с Java 8 и провели неформальный тест, чтобы сравнить производительность ее Stream API с классическими коллекциями. Ваш тест включает в себя фильтрацию списка целых чисел, извлечение квадратного корня из четных чисел и сохранение результатов в двойном списке. Однако вы сомневаетесь в достоверности своего теста и хотите прояснить истинные последствия для производительности.
Оценка эталонного теста
Ваши первоначальные результаты, указывающие потоки быть медленнее, чем сборы, вызвало обеспокоенность. Чтобы обеспечить более надежную оценку, важно устранить потенциальные ошибки и провести объективное тестирование. Вот некоторые соображения:
Правильные результаты сравнительного анализа
Следуя этим рекомендациям, давайте вернемся к оценка производительности с использованием JMH и улучшенных стратегий сравнительного анализа:
@OutputTimeUnit(TimeUnit.NANOSECONDS) @BenchmarkMode(Mode.AverageTime) @OperationsPerInvocation(StreamVsVanilla.N) public class StreamVsVanilla { public static final int N = 10000; static ListsourceList = new ArrayList(); static { for (int i = 0; i vanilla() { List result = new ArrayList(sourceList.size() / 2 1); for (Integer i : sourceList) { if (i % 2 == 0){ result.add(Math.sqrt(i)); } } return result; } @Benchmark public List stream() { return sourceList.stream() .filter(i -> i % 2 == 0) .map(Math::sqrt) .collect(Collectors.toCollection( () -> new ArrayList(sourceList.size() / 2 1))); } }
Результаты:
Benchmark Mode Samples Mean Mean error Units StreamVsVanilla.stream avgt 10 17.588 0.230 ns/op StreamVsVanilla.vanilla avgt 10 10.796 0.063 ns/op
Результаты
Вопреки первоначальным результатам, тест JMH ясно показывает, что традиционный подход к сбору данных значительно быстрее, чем потоковый подход в этом конкретном сценарии.
Вывод
Основываясь на этих улучшенных результатах сравнительного анализа, мы можем заключить, что:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3