SFu*_*n28 12 clojure clojureclr
CVM上的Clojure与CLR的性能比较是否存在?或者也许那些同时使用性能敏感代码的人可以给出一些轶事评论?
小智 21
Clojure JVM的性能优于Clojure CLR.我没有明确的基准指向,但我有很多在两种环境中进行编译和运行测试的经验,差别很明显.
差异涉及几个因素.有些正在研究中.有些与JVM和CLR性能差异有关,因此超出了ClojureCLR开发人员要解决的问题.
(1)将Clojure代码编译到平台中间语言.
在最基本的层面上,生成的IL几乎相同.但是,由动态语言运行时的某些限制所强制的设计选择会导致每个函数定义创建额外的类和函数调用以进行额外的方法调用.ClojureCLR 1.4版(即将推出)消除了DLR用于大多数代码生成的需要.(DLR仍将用于CLR互操作和多态内联缓存.)此时,生成的代码将与JVM版本基本相同.启动时间减少了10%,简单的基准测试显示比版本1.3提高了4-16%.更多细节在这里.
(2)启动时间Clojure JVM的启动速度明显快于Clojure CLR.其中大部分可追溯到JVM能够选择性地加载类文件(相对于加载整个程序集的CLR)以及JIT编译发生时的差异.但是,如果ClojureCLR是NGEN,那么启动时间非常快.更多细节在这里.
(3)JVM与CLR性能有一些关注使ClojureJVM与HotSpot编译器优化配合良好.我没有明确的证据,但我猜测HotSpot在编译的Clojure代码与CLR JITter中的内联方面做得更好.可以公平地说,没有注意如何使ClojureCLR更好地利用CLR JITter.
ClojureCLR 1.4的发布将为一些基准测试提供良好的机会.
我没有真正使用过CLR版本,所以无法完全回答你的问题.
然而值得注意的是,到目前为止,大多数优化/开发工作都已进入Clojure的主线JVM版本.因此,在大多数情况下,您可以期望Clojure的JVM版本目前表现得更好.
JVM上的Clojure已经是最快速的动态类型语言之一 - 从基准测试游戏页面来看,Common Lisp是唯一的动态类型语言(略微)更快.
随着时间的推移,我预计Clojure JVM/CLR差距会缩小,因为两个版本都倾向于主机平台的性能.但是现在,如果性能是您关注的主要问题,我肯定会推荐JVM版本(以及性能,JVM版本对整体成熟度,库可用性和跨平台支持也可能更好).
| 归档时间: |
|
| 查看次数: |
4376 次 |
| 最近记录: |