Я хотел сделать рендеринг графики в реальном времени и пытался выполнить несколько расчетов на пиксель за кадр. Затем я быстро заметил, что это было очень медленно и началось с самой базы: как быстро я могу перебирать все пиксели?Clojure performance: REPL versus uberjar
Я нашел DOTIMES достаточно быстро, но когда я делаю это в РЕПЛ это ужасно медленно:
user=> (dotimes [_ 10] (time (dotimes [_ 1e7] (+ 1 1))))
"Elapsed time: 409.177477 msecs"
"Elapsed time: 417.755502 msecs"
"Elapsed time: 418.939182 msecs"
"Elapsed time: 420.131575 msecs"
"Elapsed time: 419.83529 msecs"
"Elapsed time: 417.612003 msecs"
"Elapsed time: 420.749229 msecs"
"Elapsed time: 418.918554 msecs"
"Elapsed time: 414.403957 msecs"
"Elapsed time: 417.729624 msecs"
nil
user=>
Тогда я положил это в проект Leiningen. Когда я делаю «лейн-бег», он так же медленный. Но когда я создаю uberjar и запустить его с помощью команды Java это намного быстрее:
% java -jar target/looping-0.1.0-SNAPSHOT-standalone.jar
"Elapsed time: 122.006758 msecs"
"Elapsed time: 3.667653 msecs"
"Elapsed time: 3.60515 msecs"
"Elapsed time: 4.008436 msecs"
"Elapsed time: 3.961558 msecs"
"Elapsed time: 3.60212 msecs"
"Elapsed time: 3.592532 msecs"
"Elapsed time: 4.573949 msecs"
"Elapsed time: 3.959568 msecs"
"Elapsed time: 3.607495 msecs"
Хотя первый запуск еще много медленнее. В чем разница? В обоих случаях код компилируется, нет интерпретируемого Clojure, не так ли? Это JIT, некоторые оптимизации или некоторые специальные параметры JVM, которые установлены для REPL?
Спасибо за любые идеи.
Я не могу воспроизвести медленность REPL. Какая у вас настройка? –