以下是代码:
(time
(dorun 1000000
(repeatedly #(let [a (long-array (range 10))]
(aget a 7)))))
(time
(dorun 1000000
(repeatedly #(let [^longs a (long-array (range 10))]
(aget a 7)))))
答案 0 :(得分:4)
Clojure编译器将对long-array
的调用内联到对Java方法clojure.lang.Numbers/long_array
的调用中,该方法的返回类型为long[]
。因此,编译器已经能够推断出a
的类型,而类型提示在这里没有任何好处。
将其与:
进行比较(time
(dorun 1000000
(repeatedly #(let [a (or (long-array (range 10))
(int-array (range 10)))]
(aget a 7)))))
此处,编译器无法推断a
的类型,因为它无法预测or
的哪个分支将返回,因此您应该会看到与您相比的显着性能损失示例代码。