【发布时间】:2014-10-24 21:40:15
【问题描述】:
我做了一个简单的性能测试:创建 900000 大小的数组并读取它的所有元素。
(time (let [array (byte-array 900000)]
(loop [i (- 900000 1)]
(when (< 0 i)
(aget array i)
(recur (- i 1))))))
"Elapsed time: 10.244612 msecs"
然后我想确定要动态创建的数组类型,为了简单起见,这里定义了重言式哈希图:
(def types {:byte-array byte-array :int-array int-array})
现在我再次运行测试并获得了很大的性能差距:
(time (let [array ((types :byte-array) 900000)]
(loop [i (- 900000 1)]
(when (< 0 i)
(aget array i)
(recur (- i 1))))))
"Elapsed time: 7190.233155 msecs"
以及解决方法:
(time (let [^bytes array ((types :byte-array) 900000)]
(loop [i (- 900000 1)]
(when (< 0 i)
(aget array i)
(recur (- i 1))))))
"Elapsed time: 12.48304 msecs"
问题是如何动态输入提示clojure?有谁知道幕后发生了什么?
【问题讨论】: