评论者:gshayban
哼,我无法复现你的结果。
我不确定你是否正在使用 lein 进行测试,在什么平台上,什么是 JVM 选项。
我们可以直接使用这个小小的 harness 来测试,而不是直接针对 clojure.jar 吗?我已经附加了这个 harness 和两次运行结果(一个使用默认堆,另一个使用 3GB 的 G1GC)
我还添加了一个中等和一个小(范围)。
根据谣言,我在所有情况下都看到 doseq2 超越好,只有在小范围中除外。使用 criterium 显示 doseq2 持有更宽的性能差距。
我将结果并排粘贴以方便查看。
`
core/doseq doseq2
“经过时间:1610.865146 毫秒” “经过时间:2315.427573 毫秒”
“经过时间:2561.079069 毫秒” “经过时间:2232.479584 毫秒”
“经过时间:2446.674237 毫秒” “经过时间:2234.556301 毫秒”
“经过时间:2443.129809 毫秒” “经过时间:2224.302855 毫秒”
“经过时间:2456.406103 毫秒” “经过时间:2210.383112 毫秒”
;; 中等范围,较少绑定
core/doseq doseq2
“经过时间:28.383197 毫秒” “经过时间:31.676448 毫秒”
“经过时间:13.908323 毫秒” “经过时间:11.136818 毫秒”
“经过时间:18.956345 毫秒” “经过时间:11.137122 毫秒”
“经过时间:12.367901 毫秒” “经过时间:11.049121 毫秒”
“经过时间:13.449006 毫秒” “经过时间:11.141385 毫秒”
;; 小范围,较少绑定
core/doseq doseq2
“经过时间:0.386334 毫秒” “经过时间:0.372388 毫秒”
“经过时间:0.10521 毫秒” “经过时间:0.203328 毫秒”
“经过时间:0.083378 毫秒” “经过时间:0.179116 毫秒”
“经过时间:0.097281 毫秒” “经过时间:0.150563 毫秒”
“经过时间:0.095649 毫秒” “经过时间:0.167609 毫秒”
;; 小块不处理的缩减,较少绑定
core/doseq doseq2
“经过时间:2.351466 毫秒” “经过时间:2.749858 毫秒”
“经过时间:0.755616 毫秒” “经过时间:0.80578 毫秒”
“经过时间:0.664072 毫秒” “经过时间:0.661074 毫秒”
“经过时间:0.549186 毫秒” “经过时间:0.712239 毫秒”
“经过时间:0.551442 毫秒” “经过时间:0.518207 毫秒”
core/doseq doseq2
“经过时间:95.237101 毫秒” “经过时间:55.3067 毫秒”
“经过时间:41.030972 毫秒” “经过时间:30.817747 毫秒”
“经过时间:42.107288 毫秒” “经过时间:19.535747 毫秒”
“经过时间:41.088291 毫秒” “经过时间:4.099174 毫秒”
“经过时间:41.03616 毫秒” “经过时间:4.084832 毫秒”
;; 小块可缩减的,较少绑定
core/doseq doseq2
“经过时间:31.793603 毫秒” “经过时间:40.082492 毫秒”
“经过时间:17.302798 毫秒” “经过时间:28.286991 毫秒”
“经过时间:17.212189 毫秒” “经过时间:14.897374 毫秒”
“经过时间:17.266534 毫秒” “经过时间:10.248547 毫秒”
“经过时间:17.227381 毫秒” “经过时间:10.022326 毫秒”
;; 更多绑定
core/doseq doseq2
“经过时间:4.418727 msecs” “经过时间:2.685198 msecs”
“经过时间:2.421063 msecs” “经过时间:2.384134 msecs”
“经过时间:2.210393 msecs” “经过时间:2.341696 msecs”
“经过时间:2.450744 msecs” “经过时间:2.339638 msecs”
“经过时间:2.223919 msecs” “经过时间:2.372942 msecs”
core/doseq doseq2
“经过时间:28.869393 msecs” “经过时间:2.997713 msecs”
"经过时间: 22.414038 毫秒" "经过时间: 1.807955 毫秒"
"经过时间: 21.913959 毫秒" "经过时间: 1.870567 毫秒"
"经过时间: 22.357315 毫秒" "经过时间: 1.904163 毫秒"
"经过时间: 21.138915 毫秒" "经过时间: 1.694175 毫秒"
`