Google:C++、Java、Scala、Go四种语言性能对比
来源:互联网 发布:json格式化为一行 编辑:程序博客网 时间:2024/04/28 18:43
谷歌发布了一个研究报告,仔细比较了C + +、Java、Scala和谷歌自己拥有的Go编程语言的性能。
根据谷歌的测试报告(PDF格式),C + +是四种语言中运行速度最快的。但是该文件同时也指出,优化代码相对困难,这需要相当的努力、熟练的水准,不是平均水平的程序员所能达到。
Go旨在消除至少这个限制一些,但它仍然是年轻的(它首次亮相大约一年,不过前半年只是一种“实验性”语言年),并在大多数谷歌测试中表现出,它落后于C + +以及Java和Scala。“Go提供了有趣的语言特性:这是一个简洁和标准化的符号,”阅读了报告,GOOGLE创始人罗伯特亨特写下:“[但是]语言编译器仍然是不成熟的:无论是性能和二进制大小方面都反应了该问题。”
这就是说,Go的编译比其他三种语言都要快。 Java和Scala编译成Java字节码,而C + +和Go编译成机器代码。谷歌目前没有测试并发:一个为Scala和Go特别关注的领域。Go被设计为一个并发语言,提供了C + +的速度,但“感觉”像Python的动态语言。
Scala——一个面向对象编程和过程语言的之间语言,运行在Java虚拟机上——边缘上运行Java,而且它有一个更小的代码和内存空间。但它仍然受到的一些限制Java的。从报告中看到:“Scala[的]简洁的符号语言和强大的代码优化特性,为重复杂性上最好的选择”“Java版本很可能是最容易实现,但最难的性能分析。具体来说垃圾收集的影响周围是复杂,非常难调。由于Scala在JVM上的运行有相同的问题。
与登记册上,上周五在硅谷招待会上公布的报告,Scala的创建者马丁Odersky批准了他的邮票,谷歌的基准,在两个不同的层面运作。
首先,谷歌编码为每种语言,使用语言的惯用容器类基准,循环结构,以及内存/对象分配计划——不使用语言,旨在最大限度地表现特定的工具。“这种方法允许的语言功能,代码的复杂性,编译器和编译时,二进制大小,运行时间和内存足迹几乎公平比较”的文件说。
再经过测试的结果在谷歌公布,各种谷歌的工程师优化了每个语文基准,并再次运行测试。“虽然这项工作是一个比较轶事只,基准,以及随后的调整努力,都在各自语言的典型表现痛点指示,”亨特说。
Odersky同意,至少在涉及到Scala。优化后的——这涉及到Scala的功能方面的优势——Scala的代码及其运行时的大小显着减少。“我特别喜欢这个主意来构建一个角度非专业点的一个算法,通过比较数据,然后...然后挑战人们的优化,”Odersky说。“从某种意义上说,这是公平的。”
在优化阶段还显示,而C + +提供了最快的运行时间,优化代码是比较困难的。在优化阶段,开发商还显着地降低了C大小+二进制文件。
据来自Google员工伊恩前往兰斯泰勒在邮件列表发送,很少把工作转到优化之前,该文件的发布,而现在,经过进一步的优化,代码要快得多。“尽管名称,[表面上转到优化版]代码从来没有打算成为一个地道的或有效率前往。罗伯特[亨特]例子让我看看他的代码,再看一眼,我就砍死了一个小时到做一点点更好。如果我已意识到,他将对外发布,我会使其更好的投入更多的时间,“泰勒说。
但是Scala说Odersky,演出的,譬如他的预期。“我知道,我们是头到与Java头。这是一个令人惊喜的,我们都优于Java的优化和非优化的测试,但我不希望成为应用程序的规则。”
- Google:C++、Java、Scala、Go四种语言性能对比
- C++,JAVA,Go对比MySql数据库操作性能
- scala与Java性能对比
- Java、Scala和Go语言多线程并发对比测试结果和结论
- go语言和C语言的对比
- Scala和Java的循环性能对比
- scala与java的性能对比
- go语言和java+jetty的web hello world 性能测试对比
- Java, Python, Ruby, PHP, C等语言性能对比
- C#, C++, Java性能对比
- C#, C++, Java性能对比
- Go语言 整数和浮点数性能对比
- Go语言 传值和传指针性能对比
- Swift,Objective-C语言性能对比测试
- GO,NODEJS,.NetCore性能对比
- java、C++、C#、 Objective-c语言对比
- C、C++、Java三种语言语法对比(一)
- scala 对比java 贴
- 八卦一下Erlang的发明人Joe Armstrong
- C# Socket 编程简单实例
- Wince连接WebService注意点(包括网络配置和注意点,其他方式都尝试过不行的可以看看)
- ORACLE SPATIAL 中地理编码的数据模型探讨
- 工厂模式_面向抽象类编程
- Google:C++、Java、Scala、Go四种语言性能对比
- 前缀 中缀 后缀 波兰式 逆波兰式
- [小说连载]张小庆,在路上(7)-做所有事情最重要就是要跟对人
- 20110611 DiscuzNT代码研究(2)
- 制作了一个游戏,先放上截图吧。
- malloc函数动态分配内存的策略
- DataGridView获得所有选中行的某列的值
- 再谈“我是怎么招聘程序员的”
- What’s all this fuss about Erlang