JVM与CLR的Clojure性能

时间:2012-05-31 03:32:29

标签: clojure clojureclr

CVM上的Clojure与CLR有性能比较吗?或者也许那些同时使用性能敏感代码的人会给出一些轶事评论?

2 个答案:

答案 0 :(得分:21)

Clojure JVM的性能优于Clojure CLR。我没有明确的基准指出,但我在两种环境中都有很多编译和运行测试的经验,差别很明显。

差异涉及多个因素。有些正在研究中。有些与JVM和CLR性能差异有关,因此超出了ClojureCLR开发人员要解决的问题。

(1)将Clojure代码编译到平台中级语言 在最基本的层面上,生成的IL几乎相同。但是,由动态语言运行时的某些限制所强制的设计选择会导致每个函数定义创建额外的类和函数调用以进行额外的方法调用。 ClojureCLR 1.4版(即将推出)消除了DLR用于大多数代码生成的需要。 (DLR仍将用于CLR互操作和多态内联缓存。)此时,生成的代码将与JVM版本基本相同。启动时间减少了10%,简单的基准测试显示比版本1.3提高了4-16%。更多细节here

(2)启动时间 Clojure JVM的启动速度明显快于Clojure CLR。其中大部分可追溯到JVM能够选择性地加载类文件(相对于加载整个程序集的CLR)以及JIT编译发生时的差异。但是,如果ClojureCLR是NGEN,启动时间真的快。更多详情here

(3)JVM与CLR性能 已经注意到使ClojureJVM与HotSpot编译器优化一起工作得很好。我没有明确的证据,但我猜测HotSpot在编译的Clojure代码与CLR JITter中的内联方面做得更好。可以公平地说,没有注意如何让ClojureCLR更好地利用CLR JITter。

ClojureCLR 1.4的发布将为一些基准测试提供良好的机会。

答案 1 :(得分:7)

我没有真正使用过CLR版本,因此无法完全回答您的问题。

然而值得注意的是,到目前为止,大多数优化/开发工作都已进入Clojure的主线JVM版本。因此,在大多数情况下,您可以期望Clojure的JVM版本目前表现得更好。

JVM上的Clojure已经是最快的动态类型语言之一 - 来自benchmarks game页面Common Lisp是唯一的动态类型语言(略微)更快。

随着时间的推移,我预计Clojure JVM / CLR差距会缩小,因为两个版本都倾向于主机平台的性能。但是现在,如果性能是您关注的主要问题,我肯定会推荐JVM版本(以及性能,JVM版本对整体成熟度,库可用性和跨平台支持也可能更好)。