我已经开始 a project on GitHub 玩这个了。
Streams 的初始结果出人意料地积极 - 对于字符串上的身份映射,Java HotSpot(TM) 64 位服务器 VM(构建 25.25-b02,混合模式)在 2014 MacBookAir 1.7Ghz i7,代码版本 https://github.com/dmcg/iterables-v-streams#ea8498ee0627fc59834001a837fa92fba4bcf47ebcf47e
实验选择:
基准方法:[番石榴,迭代,流]
仪器:[分配,运行时]
用户参数:{}
虚拟机:[默认]
选择类型:全笛卡尔积
该选择产生 6 个实验。
试验报告 (1 of 6):
实验 {instrument=allocation, benchmarkMethod=iterate, vm=default, parameters={}}
结果:
字节(B):最小=4072.00,第一个队列=4072.00,中位数=4072.00,平均值=4072.00,第三个队列=4072.00,最大=4072.00
对象:min=3.00,1st qu.=3.00,median=3.00,mean=3.00,3rd qu.=3.00,max=3.00
试验报告(2 份,共 6 份):
实验 {instrument=allocation, benchmarkMethod=guava, vm=default, parameters={}}
结果:
字节(B):最小值=15104.00,第一个队列=15104.00,中位数=15104.00,平均值=15104.00,第三个队列=15104.00,最大值=15104.00
对象: min=17.00, 1st qu.=17.00, median=17.00, mean=17.00, 3rd qu.=17.00, max=17.00
试验报告(6 之 3):
实验 {instrument=allocation, benchmarkMethod=streams, vm=default, parameters={}}
结果:
字节(B):最小值=15272.00,第一个队列=15272.00,中位数=15272.00,平均值=15527.64,第三个队列=15432.00,最大值=17252.80
对象:min=20.00, 1st qu.=20.00, median=20.00, mean=25.00, 3rd qu.=26.00, max=53.00
试验报告 (4 of 6):
实验 {instrument=runtime, benchmarkMethod=guava, vm=default, parameters={}}
结果:
运行时间(ns):最小值=13365.32,第一个队列=13660.61,中位数=13802.51,平均值=13961.91,第三个队列=14445.46,最大值=14715.34
试验报告(6 之 5):
实验 {instrument=runtime, benchmarkMethod=iterate, vm=default, parameters={}}
结果:
运行时间(ns):最小值=9952.47,第一个队列=10892.64,中位数=11372.35,平均值=11243.07,第三个队列=11785.48,最大值=12024.76
试验报告(6 之 6):
实验 {instrument=runtime, benchmarkMethod=streams, vm=default, parameters={}}
结果:
运行时间(ns):最小值=10527.26,第一个队列=11051.70,中位数=11747.29,平均值=11631.15,第三个队列=12205.97,最大值=12581.39
从以下位置收集了 81 个测量值:
2 件乐器
2 个虚拟机
3 个基准
执行完成:1.188 分钟。
结果已上传。查看它们:https://microbenchmarks.appspot.com/runs/d2c7f83b-2cfa-4217-ab0b-e8d506eaa85c
我仍然对 Google 卡尺有所了解,但似乎表明 Streams 比 Guava 快,并且比直接 for 循环慢不了多少。