Java语言与Java语言相比有多快?[关闭]


77

有没有可以将Javascript性能与Java性能进行比较的测试?

更新:由于每个人都在问这个问题,为什么这是上下文,所以:)

众所周知-我希望-如今的JavaScript不仅驻留在Web客户端中,而且还驻留在具有node.js的Web服务器中。

它也可以在带有appcelerator和phonegap的手机和dekstop中运行。

它也可以在网络浏览器中大量使用,以使用户像桌面应用程序一样享受一流的体验。

但是Java也可以做这些事情,在Web客户端和手机上运行applet。它也是后端的一种语言,有许多框架可供选择。

由于它们在上述区域几乎/全部可以互相替代,因此我想了解每种情况下它们之间的性能差异:

  • 客户端:Java Applets vs Javascript
  • 服务器:Java EE与带有Node.js + Express的Javascript
  • 手机:Java ME与带Phonegap / Appcelerator的Javascript
  • 桌面:Java SE与带Phonegap / Appcelerator的Javascript

我希望现在的情况更加清楚。


2
您在处理这两种相互竞争的语言在做什么?您是否想在网络浏览器之外使用JavaScript?
约翰·库格曼

8
@约翰:见的Node.js,V8,MongoDB的....
乔希ķ

1
约翰是对的,没有上下文,这个问题就没有多大意义。如今,Java和Javascript在某些领域可以“竞争”,但它们之间的距离仍然很少。使用正确的工具完成工作!
wuputah's

3
我想您是在问:“嗨,您想喝果汁还是牛排?”
Cheng Chen 2010年

1
@约翰·库格曼 我是。在传统Web浏览器之外的几乎所有地方,阅读我打算在哪里使用它们。
never_had_a_name

Answers:


124

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并不是凭空出现的,它是基于Anamorphic Smalltalk VM的源代码的,该源代码是由一组人(其中包括一个叫Lars Bak的人)创建的。

鉴于两者大致相同,我们可以期待相似的性能。唯一的区别是,HotSpot拥有超过一百名工程师从事15年的工作,而V8拥有十几名工程师不到5年的工作。是性能上的唯一区别。这与静态类型还是动态类型无关(Java静态类型,但大多数JVM和某些HotSpot都不进行静态优化,所有优化都是纯动态的),编译与解释(HotSpot实际上是通过附加的JIT编译器来解释的,而V8是完全编译的),高级还是低级。这纯粹是关于金钱。

但是我敢打赌,对于Java实现更快的每对Java和JavaScript实现,我可以找到另一对JavaScript实现更快的对。另外,我可能可以保留这对货币,并使用其他基准。将计算机语言基准测试游戏称为“游戏”是有原因的:他们甚至鼓励您在自己的页面上使用基准测试,以使任何一种语言都升至最高水平。


10
那就是为什么我问“ JavaScript与Java相比有多快?”
never_had_a_name

12
>> Java和JavaScript都是编程语言。...编程语言不是很快。还是慢。<<是的。因此,鉴于上下文,问题在于编程语言实现而不是编程语言。
igouy

53
不同意。许多语言定义了一些功能,这些功能在设计上不能被当今的CPU有效地处理。这就是为什么Java通常会比Smalltalk更快地执行性能,而编写良好的C通常会优于Java。同样,如果某种语言是否具有自动内存管理功能,并且某种语言具有低级数据结构(byte [],C语言中的结构)也很重要。
R.Moeller

2
@ R.Moeller-的确,许多语言功能使优化变得困难。但是,(假设的)“真正智能”的编译器仍将能够将Smalltalk转换(说成)为最佳Java,从而转换为机器代码。(如果一个人可以做到,那么一个足够先进的编译器也可以做到。)“今天的CPU”或“今天的编译器”不能做到这一点从根本上说是对当今技术的限制。 )。
Stephen C

2
@StephenC:实际上,HotSpotSmalltalk VM,因此,如果Sun / Oracle将所有的钱都投入了Smalltalk而不是Java,那么Smalltalk的速度将与现在的Java一样快。(事实上,商用高性能Smalltalks没有那么远呢。)记住:当Java的第一个走了出来,Smalltalks是方式比Java快。哎呀,当Self VM(后来变成Animorphic Smalltalk VM,又变成HotSpot和V8)问世时,它与当时的许多C ++实现具有竞争性,并且比其中一些实现更快。
约尔格W¯¯米塔格

41

我只需要添加一个轶事:我最近在Javascript(nodejs v0.6.8)中重新实现了Java calc服务器(财务)。在WRT的开发过程中,与原始Java实现相比,使用Java代码实现比使用更少的代码行轻而易举。真的,那是新鲜空气。

基于Javascript的服务器能够以2.4k交易/秒的速度进行计算,而Java服务器在相同硬件上以更少的内存处理400 + /秒的交易。我不会将速度提高归因于原始V8与Java 7的性能,而是归因于实现。Javascript实现使用的数据结构要少得多,方法调用要少一个数量级,并且采用更简单明了的方法。

不用说,我对node.js的性能感到非常满意。这是来自Java多年(9)的人的。


这是一个很棒的数据点...谢谢。
HDave 2012年

7
我想您现在比较的是同步和异步方法,而不是Java与Javascript。而且,Node.js异步肯定会胜过同步tomcat servlet和库。但这不是因为Javascript更快,而是因为异步比同步更好地利用了资源。
Night Warrier 2013年

2
如果必须用Java编写该程序的另一个版本,您期望性能方面有什么变化?您是否认为通过从JavaScript版本获得的见解,程序的性能会大大提高(与第一个Java版本相比)?
rwitzel

我已经将nodeJS与number-crunching应用程序中的普通C性能进行了比较。
NodeJS

32

以下是一些比较Javascript(V8)和已编译Java的测试:

他们表明Java通常更快1。但是,如果您仔细浏览那些页面和链接的资源,您会发现很难将“喜欢”与“喜欢”进行比较。

有趣的是,在“ regex-dna”基准测试中,JavaScript在某些条件下的性能明显优于Java。我的猜测是,这是因为Javascript regex引擎比Java regex引擎快。鉴于正则表达式在典型Javascript应用程序中的重要性,这并不完全令人惊讶。

1-严格来说,您不能说语言X比语言Y快。您只能比较相应语言的特定实现。如果您想通过首页进入,我链接到的站点对此也很清楚。但是,从特定的数据点进行概括并没有明显的矛盾的数据点,这并不是完全不合理的……在计算密集型任务中,Java通常比Javascript更快。但另一方面,这种表现通常不是客观上重要的标准。


>>我的猜测是这是因为Javascript regex引擎速度更快... <<借助regex-dna JavaScript V8#2程序源代码是指向“ Irregexp,Google Chrome的新Regexp实现”的链接,blog.chromium.org /
2009/02

11

Java,显然。

程序员喜欢比较执行速度,就像某种生气的内容。在大多数情况下,这只是一个指标,并不是长期来看最重要的指标。Java是一种语言,它混合了几乎所有内容的足够快的速度,但又具有足够高的级别,因此您会得到诸如GC之类的东西,而您通常不会以类似的语言得到它们。Javascript是一种动态关闭语言,非常适合快速完成工作(对于FP程序员陷入OO世界;-))。在任何一个都适合的空间中,没有太多的交叉方式。

我现在就停止思索

编辑:解决帖子中的编辑

由于人们写惯用javascript(由函数组成的函数)的方式,它非常适合异步编程,这可能比其他任何流行的语言都要好。当涉及到大量的短连接时,Node.js令人眼前一亮,因此javascript非常适合此类事情。

尽管node.js绝对令人赞叹不已,但是无论炒作怎么说,成为新的热点并不意味着它是所有方面的最佳选择。如果一个Java应用程序可以被节点替换,那么一开始Java真的不合适。


9

可能不是,但这并不重要。

在Google Chrome推出JavaScript JIT之前,只要问题变得足够大以克服加载时间,Java就会赢得JavaScript。

由于整数与浮点运算的关系,Java仍应全面淘汰JavaScript。无论JIT多么出色,它都无法真正弥补这一点。

无论如何,WebAssembly都会扭转它的头脑。


6
Facebook上的PHP问题变得足够大,然后他们对其进行了编译。所以...
BrunoLM

1
您的最后一点不一定正确(也许是在2010年?)。V8将首先编译优化程度较低的函数,同时跟踪几次运行的类型等统计信息。假设您要对数组中的所有数字求和。如果V8看到以前的值都是整数,它将重新编译该函数以使用整数加法器机器码指令(它是“乐观的”)。如果在数组的中途突然有一个字符串,它将退回到优化程度较低的版本。因此,如果您保持一致,则可能会很快。
ShawnFumo

Vyacheslav Egorov在今年早些时候发表了一篇精彩的演讲,深入探讨了V8中的数组(以及其他方面)。
ShawnFumo

嗯,所以他们终于也解决了。我猜随着时间的流逝,这个答案将逐渐变得越来越不正确。
2013年

4

http://benchmarksgame.alioth.debian.org/u64q/javascript.html

(请记住要同时查看cpu列和经过的秒数)。

根据上面的链接,现实中的JavaScript几乎在所有情况下都慢得多。


3
Java几乎在每种情况下都使用2-3倍的内存...这似乎并不公平
Esailija

1
这个基准是不公平的。大多数Java性能。通过多线程获得。您可以通过新的流程和管道在nodejs中进行多线程处理。但这在这些测试中是缺失的。
斯捷潘·雅科文科

3
@Stepan -这里是你如何能有助于程序- benchmarksgame.alioth.debian.org/play.html#contribute
igouy

-7

它们只是名字相似而已。Java是在解释JavaScript的同时进行编译的(主要是)。即使使用V8的及时编译器,Java的所有功能也都更快。


1
公平地讲,它们比仅凭名称更相似。首先,由于使用C,它们在语法上都相似。此外,可以使用JavaScript编写Java代码。最后,Java附带内置的JavaScript解释器,因此您可以将JavaScript嵌入Java应用程序中。
摩西

您对于“一切都更快”这一疯狂主张有任何实际证据吗?考虑到这两种语言经常在非常不同的领域中工作,我想说“更快”的任何尝试都将需要更多的上下文,因为我不认为Java会更快(在所有方面)。您会使用Java applet来说一句JS在休眠时可以实现的la脚DHTML效果吗?小程序快了吗?
Svend

2
@Svend:您不会通过编写applet或特定功能来对语言进行基准测试。做一些抽象的数学运算,递归,用10,000个节点填充红树/黑树,浮点计算,字符串处理等。我们这里不争论使用,而是争论哪个(在核心)执行得更快。
乔什·K

当您主要说说JS时,是因为GWT之类的说法?何时不解释JS?
Esteban Araya

@Esteban Araya:所有现代JavaScript执行引擎都具有编译器。V8甚至是编译器,甚至没有解释器。
约尔格W¯¯米塔格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.