在阅读了一些关于该主题的博客文章后,我发现在 Clojure 中对数组进行变异是这样的:
(defn m [xs ys]
(dotimes [i (count xs)]
(aset #^ints ys (int i)
(int (* (int 3) (int (aget #^ints xs (int i))))))))
在哪里(def xs (into-array Integer/TYPE (range 1000000)))
和(def ys (into-array Integer/TYPE (range 1000000)))
根据 Criterium,平均需要 14 毫秒,而 Java 也是如此,
public static int[] m(int[] x, int[] y)
{
for(int i=0; i<x.length; i++)
y[i] = 3*x[i];
return y;
}
平均需要800us。**
我是否正在尽我所能让事情进展得更快,我还有什么可以沿着优化路径走下去的吗?
** 我使用 Criterium(report-result (bench (m xs ys )) :verbose)
和(report-result (bench (. Test m xs ys)) :verbose)