Прочитав несколько сообщений в блоге на эту тему, я обнаружили, что преобразование массива в 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)))
заняло в среднем 14 мс согласно Criterium, тогда как в Java для того же
public static int[] m(int[] x, int[] y)
{
for(int i=0; i<x.length; i++)
y[i] = 3*x[i];
return y;
}
требуется в среднем 800 мкс.**
Делаю ли я все, что в моих силах, чтобы ускорить процесс, и могу ли я пойти дальше по пути оптимизации?
**Я замерил время с помощью Criterium с (report-result (bench (m xs ys )) :verbose)
и(report-result (bench (. Test m xs ys)) :verbose)