尽管JVM的进步,为什么Jython比CPython慢​​得多?

时间:2011-02-15 05:55:46

标签: python jvm jython

请不要发生火焰战争。我确实不是Java的粉丝,但我认为JVM是一个相当不错且优化得很好的虚拟机。它支持JIT,非常接近流行的CPU架构的共同点。我假设CPython运行时将比相应的基于JVM的运行时更远离金属。

如果我的假设是正确的,有人可以向我解释为什么Jython与CPython相比会遭受如此重大的性能损失吗?我最初的假设是JVM只是为静态语言设计的,而且很难将动态语言移植到它上面。然而,Clojure似乎是这一论点的一个反例。

另一方面,IronPython似乎做得很好。我相信这两个项目的主要开发人员是相同的,所以代码设计和实现在一个方面明显优于另一个的论点似乎不太可能。

我无法弄清楚具体原因是什么;任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:21)

请记住,IronPython是由一个最初的Jython开发人员(Jim Huginin)创建的,目的是为了证明.NET CLR是动态语言的糟糕平台。他最终证明自己错了,IronPython的核心最终成为.NET动态语言运行时(在.NET上进行其他动态语言实现,比如IronRuby,更容易构建)。

因此,有两个主要的不同点:

  • 最初的.NET CLR开发人员受益于相对于早期版本的JVM的额外行业VM经验,允许他们避免已知问题而无需向后兼容性问题
  • 同样适用于Jim知道根据他的Jython经验要避免什么陷阱

相对于CPython和IronPython,简单地缺少专门用于Jython的开发资源,以及Jython开发优先级,专注于将其与最新版本的Python进行功能奇偶校验,而不是速度优化,Jython将会很容易理解在速度方面落后。

也就是说,Jython类似于CPython和IronPython,因为使用更好的算法通常胜过微基准测试中较差的性能。 JVM / CLR也意味着对于特定组件而言,下降到Java或C#比下降到CPython的C扩展更容易(尽管像Cython这样的工具试图稍微缩小这个差距)。