(defn sum [numbers] (reduce + numbers)) (def numbers (into [] (range 0 100000000))) (time (sum numbers))
上面是运行的代码。
只需将大量数字相加即可。
此行在repl中多次执行: (time (sum numbers)) 每次几乎使所有内核都完全运行。
(time (sum numbers))
查看jvisualvm,并没有创建太多线程。
但是这段代码使用了我的6核心笔记本电脑上可用的所有12个超线程。
使这一切成为可能的幕后发生了什么?
感谢评论。
它与范围的大小有关。
在我的笔记本电脑上,当大约有7,000万个数字时,一切都很好。
当它达到8000万左右时,堆的大小就会增长很多,所需的时间会大大增加,并且所有内核都可以正常工作。可视vm显示更多的GC活动正在发生。
因此,上面的评论可能是正确的,这与GC有关。