首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python比Java/C#慢吗?

Python比Java/C#慢吗?
EN

Stack Overflow用户
提问于 2009-03-23 10:26:13
回答 7查看 98.8K关注 0票数 72

Python比Java/C#慢吗?

performance-comparison-c-java-python-ruby-jython-jruby-groovy

下面是一个优化CPython的项目:unladen-swallow

EN

回答 7

Stack Overflow用户

发布于 2009-03-23 11:30:49

问为什么Python比Java/C#慢是不正确的。Java有多快?嗯,朴素的解释器比优化的编译器慢十倍左右。我相信有一个用JavaScript编写的Java字节码解释器--这可能不是很快。因此,我想问的问题似乎是“为什么CPython语言系统比同等的Sun、IBM、Oracle JRE和微软.NET运行时慢?”

我相信正确的答案是非技术性的。最快的Java和.NET运行时更快,因为它们有大型的全职技术团队在性能竞争的环境中开发它们。

动态语言系统很容易实现。任何一个笨蛋都能做到。我有过。静态语言系统的设计和实现更为复杂。一个简单的静态系统往往会比等效的正在工作的动态系统运行得更快。然而,高度优化的动态系统也有可能运行得几乎同样快。据我所知,一些Smalltalk实现相当不错。一个经常被引用的已开发动态系统的例子是MIT Lisp Machine

此外,如果真正的工作是由库代码完成的,那么语言系统可能无关紧要。或者,语言可以鼓励(或给予时间(!))开发更有效的算法,可以很容易地消除恒定因子性能差异。

票数 62
EN

Stack Overflow用户

发布于 2009-03-23 10:30:51

正如评论中所建议的,您真的应该提供一个测试用例来进行推理。性能差异背后的原因将根据所执行的测试而变化。

然而,我认为静态与动态的本质很可能与此有很大关系。对于非虚拟调用,JIT编译的C#/Java非常便宜,因为它可以在JIT时间被准确地确定。即使是虚拟调用也只涉及单级重定向。当绑定变成动态时,需要考虑的事情就更多了。

我对Python了解的细节还不够多,无法声称理解它确切的运行时行为,我怀疑它的运行时行为可能也会因版本和实现而异。有一种叫做"python byte code“的东西,然后由虚拟机执行--这个虚拟机是否真的执行JIT编译是另一回事。

票数 16
EN

Stack Overflow用户

发布于 2009-03-23 12:19:45

归根结底,这是因为编译阶段需要处理的信息较少,因此运行时需要在使用do类型(动态类型)的语言时做更多的工作。

因此,如果我进行方法调用foo.bar(),在Java或C++的情况下,通过发现"foo“的类型,然后在编译器知道会找到它的内存位置直接调用该方法,就可以在编译过程中优化对bar的调用。因为python或任何其他动态类型语言编译器不知道对象foo属于什么类型,所以它必须在运行时进行类型检查,然后查找bar方法的地址,然后调用它。

python编译器编写者还面临着其他困难,尽管上面的这一点希望能给出足够的指示。因此,即使有最好的编译器编写人员,静态类型语言在运行时也可能表现得更好。

其中动态类型的语言分数通常在开发时。由于要编写和维护的代码行更少,并且开发人员没有编译等待时间,因此开发过程通常要快得多。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/672857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档