Java和JavaScript都是编程语言。编程语言只是一堆抽象的数学规则。编程语言的速度并不快。或慢。他们就是这样。
应用程序的性能与语言无关。最重要的因素是应用程序体系结构。然后是算法效率。然后是微优化。然后是编译器/解释器的质量。然后是CPU。也许中间还有几个其他步骤。然而,语言并不直接发挥作用。(当然,如果你在谈论基准测试,那么特定的基准测试也起着一定的作用,以及基准测试的实现程度,运行情况,执行基准测试的人是否真的对基准测试有所了解,更重要的是统计数据。此外,对“快速”实际含义的精确定义非常重要,因为它也可以对基准测试产生重大影响。
然而,该语言可能会间接地发挥作用:在10行高度富有表现力,清晰,简洁,可读性强,分解良好,孤立,高级Lisp代码中查找和修复性能瓶颈要比在100行纠缠不清的低级C中容易得多(请注意,这两种语言只是示例。我并不是说要把任何一种语言都挑出来。例如,Twitter表示,使用比Ruby更具表现力的语言,他们无法在如此短的时间内对其架构进行如此彻底的更改,以解决其可扩展性问题。Node.js之所以能够提供如此出色的事件I /O性能,是因为JavaScript的标准库太蹩脚了。(这样,Node.js必须提供所有I / O本身,以便他们可以从头开始针对事件I / O进行优化。例如,Ruby和Python已经事件I / O库,它们与Node.js一样工作,并且更加成熟......但是,Ruby和Python已经拥有大型标准库,包括I / O库,所有这些都是同步的,并且不能很好地与事件库配合使用。JavaScript 没有 I/O 库的问题,这些库不能很好地与事件 I/O 配合使用,因为 JavaScript 根本没有 I/O 库。
但是,如果你真的想比较两者,这里有一个有趣的数据点:HotSpot,它是更受欢迎,也更高性能的JVM实现之一,是由一群人创建的,其中包括一个名叫Lars Bak的人。但实际上,HotSpot并不是凭空出现的,它基于Anamorphic Smalltalk VM的源代码,该虚拟机是由一组人创建的,其中包括一个名叫Lars Bak的人。
V8是更受欢迎,性能更高的JavaScript实现之一,是由一群人创建的,其中包括一个名叫Lars Bak的人。但实际上,V8并不是凭空出现的,它基于变形Smalltalk VM的源代码,该源代码是由一群人创建的,其中包括一个名叫Lars Bak的人。
鉴于两者或多或少相同,我们可以期待类似的性能。唯一的区别是,HotSpot有超过一百名工程师从事15年的工作,而V8有十几位工程师的工作不到5年。这是性能上的唯一区别。它不是关于静态与动态类型(Java是静态类型的,但大多数JVM和HotSpot当然不会进行任何静态优化,所有优化都是纯粹的动态),编译与解释(HotSpot实际上是用额外的JIT编译器解释的,而V8是纯编译的),高级与低级。这纯粹是关于金钱的。
但我敢打赌,对于Java实现更快的每对Java和JavaScript实现,我可以找到另一对JavaScript实现更快的实现。另外,我可能会保留这个对子,只使用不同的基准。将计算机语言基准测试游戏称为“游戏”是有原因的:他们甚至鼓励你在自己的页面上玩基准测试,使任何任意语言上升到顶峰。