Существуют ли какие-либо тесты, сравнивающие потоки Java 8 с языковыми итераторами Guava?

Я достаточно доволен Guava на Java 8 - есть ли какие-либо преимущества в производительности или подводные камни при переходе на потоки для последовательного кода?

Ответы

Ответ 1

Я начал проект на GitHub, чтобы играть с этим.

Исходные результаты на удивление позитивны для Streams - для точной карты по строкам, 64-разрядная серверная виртуальная машина Java HotSpot TM (построение 25.25-b02, смешанный режим) в 2014 году MacBookAir 1.7Ghz i7, версия кода https://github.com/dmcg/iterables-v-streams#ea8498ee0627fc59834001a837fa92fba4bcf47ebcf47e

Experiment selection: 
  Benchmark Methods:   [guava, iterate, streams]
  Instruments:   [allocation, runtime]
  User parameters:   {}
  Virtual machines:  [default]
  Selection type:    Full cartesian product

This selection yields 6 experiments.
Trial Report (1 of 6):
  Experiment {instrument=allocation, benchmarkMethod=iterate, vm=default, parameters={}}
  Results:
    bytes(B): min=4072.00, 1st qu.=4072.00, median=4072.00, mean=4072.00, 3rd qu.=4072.00, max=4072.00
    objects: min=3.00, 1st qu.=3.00, median=3.00, mean=3.00, 3rd qu.=3.00, max=3.00
Trial Report (2 of 6):
  Experiment {instrument=allocation, benchmarkMethod=guava, vm=default, parameters={}}
  Results:
    bytes(B): min=15104.00, 1st qu.=15104.00, median=15104.00, mean=15104.00, 3rd qu.=15104.00, max=15104.00
    objects: min=17.00, 1st qu.=17.00, median=17.00, mean=17.00, 3rd qu.=17.00, max=17.00
Trial Report (3 of 6):
  Experiment {instrument=allocation, benchmarkMethod=streams, vm=default, parameters={}}
  Results:
    bytes(B): min=15272.00, 1st qu.=15272.00, median=15272.00, mean=15527.64, 3rd qu.=15432.00, max=17252.80
    objects: min=20.00, 1st qu.=20.00, median=20.00, mean=25.00, 3rd qu.=26.00, max=53.00
Trial Report (4 of 6):
  Experiment {instrument=runtime, benchmarkMethod=guava, vm=default, parameters={}}
  Results:
    runtime(ns): min=13365.32, 1st qu.=13660.61, median=13802.51, mean=13961.91, 3rd qu.=14445.46, max=14715.34
Trial Report (5 of 6):
  Experiment {instrument=runtime, benchmarkMethod=iterate, vm=default, parameters={}}
  Results:
    runtime(ns): min=9952.47, 1st qu.=10892.64, median=11372.35, mean=11243.07, 3rd qu.=11785.48, max=12024.76
Trial Report (6 of 6):
  Experiment {instrument=runtime, benchmarkMethod=streams, vm=default, parameters={}}
  Results:
    runtime(ns): min=10527.26, 1st qu.=11051.70, median=11747.29, mean=11631.15, 3rd qu.=12205.97, max=12581.39
Collected 81 measurements from:
  2 instrument(s)
  2 virtual machine(s)
  3 benchmark(s)

Execution complete: 1.188 min.
Results have been uploaded. View them at: https://microbenchmarks.appspot.com/runs/d2c7f83b-2cfa-4217-ab0b-e8d506eaa85c

Я все еще склоняюсь к суппортам Google, но кажется, что потоки быстрее, чем Guava, и не намного медленнее, чем прямой цикл.