Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于Java的跨平台能力,它的开销是否比C#更大? 有人告诉我,Java的开销很大,因为基本上可以在大多数操作系统上运行java,C++没有开销,所以它可以以接近C++的速度执行。p>_Java_Jvm - Fatal编程技术网

由于Java的跨平台能力,它的开销是否比C#更大? 有人告诉我,Java的开销很大,因为基本上可以在大多数操作系统上运行java,C++没有开销,所以它可以以接近C++的速度执行。p>

由于Java的跨平台能力,它的开销是否比C#更大? 有人告诉我,Java的开销很大,因为基本上可以在大多数操作系统上运行java,C++没有开销,所以它可以以接近C++的速度执行。p>,java,jvm,Java,Jvm,那么,Java中是否有更多的开销,或者每个操作系统都有自己的JVM实现开销呢?C#,Java(我也会把它放在这里——JavaScript)是语言。语言不是快或慢,它们只是我们人类如何编写最终由计算机处理的东西的规范 最重要的是Java虚拟机。但是有几种不同的版本。这里有HotSpot(原始版本),OpenJDK,然后我们可以从BEA、Apache Harmony和 对于C#来说,有运行时间,但也有运行时间。随着时间的推移,也有一些已经被抛弃了 JavaScript(因为我把它扔在那里)有一个完整

那么,Java中是否有更多的开销,或者每个操作系统都有自己的JVM实现开销呢?

C#,Java(我也会把它放在这里——JavaScript)是语言。语言不是快或慢,它们只是我们人类如何编写最终由计算机处理的东西的规范

最重要的是Java虚拟机。但是有几种不同的版本。这里有HotSpot(原始版本),OpenJDK,然后我们可以从BEA、Apache Harmony和

对于C#来说,有运行时间,但也有运行时间。随着时间的推移,也有一些已经被抛弃了

JavaScript(因为我把它扔在那里)有一个完整的。其中一些运行时比其他运行时更快

运行时比另一种运行时更快或更慢,即使对于同一种语言也是如此。但其中一个是“跨平台”的,另一个不足以说明一个比另一个更快。工作中还有很多其他的事情,可以构建基准测试,以显示每种组合的速度都比另一种快

更进一步,我们可以看到跨多个运行时的语言。您已经有了Python作为其默认实现,但有一些在JVM中运行,也有一些在CLR中运行。类似的例子可以在和或Clojure中找到,它们可以通过编译成JavaScript,然后在其中一个JavaScript运行时而不是JVM上运行


同样,它不是快或慢的语言,而是它在运行时的实现方式。

Java语言和Java虚拟机(JVM)是完全独立的实体。Oracle在分离这两种语言方面做得很好,因此其他语言(如Scala甚至Ruby)可以在JVM上运行

Java语言本身显然是以JVM为目标编写的,但是,据我所知,没有实际要求它必须这样做。据我所知,完全可以编写生成本机代码而不是Java字节码的Java编译器。(这完全是假设。我从未听说过有人真的这么做——这没有什么意义。当前JVM的实现速度几乎与本机代码一样快,由此带来的任何好处都将大大超过它所带来的可移植性损失。)

如前所述,C#并没有一个VM,这一事实使情况更加复杂。因此,您可以做的最佳比较是“JVM的这个实现运行Java代码的速度是否比.NET framework的实现运行C代码的速度更快?”


最后,除非非常相似的代码有显著的速度差异,否则比较就没有那么引人注目了,因为变量太多了。使用不同的JVM,或不同的Java编译器,或不同的.NET实现,或不同的C#编译器,或在不同的机器上运行相同的代码,数字就会改变。

JVM和.NET都是多平台的。无论如何,这与它的运行时性能无关。NET倾向于更多地依赖于提前编译(通过
ngen
),而JVM倾向于更多地依赖于即时编译,但两者都可以提供接近本机的速度。C#不是在自己的VM中运行吗?我猜他的意思是C#或多或少适合Windows。是的,C#有自己的虚拟机。他说,由于Java更倾向于多平台而不是Windows,所以它的开销更大。C#在任何方面都不是Windows专用的,事实上Mono和Xamarin为许多平台提供了.NET,包括移动平台。这种说法毫无意义。跨平台意味着每个平台都有一组库实现和一个JVM。它与语言本身或执行速度没有任何关系。即使使用JVM,也有多种不同的实现,不仅仅是来自Oracle(sun)。还有来自IBM和其他公司的OpenJDK和商业实现。像露比这样的其他语言有很多不同的运行时(其中一些实际上是在JVM上运行),甚至像C、C++或FORTRAN这样的编译语言有很多不同的编译器。其中一些生成的代码比其他代码运行得更快。@BrettOkken感谢您提醒我-尽管在过去使用JRockit,但我完全忘记了它也是它自己的JVM。运行时可能会有所不同,但说一种语言的语义对它的速度没有影响是错误的。比较C++和Python中的方法调用。在非虚情况下,C++方法调用实际上是一个带有零参数的C调用。这对于在调用之后实现一系列推送是很简单的。另一方面,Python需要一个散列查找来查找变量,另一个散列查找来查找_调用_,需要更多的查找来查找参数,而且情况会变得更糟。如果你能证明这项工作是不必要的,你可以跳过它,但你不能总是这样做,这肯定会影响性能。@SteveMcKay我承认这项工作过于简单化了。一个人可以指出他喜欢或不喜欢思考。但Python和C++并不完全是一个公平的测试。获得一个测试并再次运行这些测试可能会很有趣。因为那里仍然是python(尽管运行时不同)。GCJ生成本机代码。不过,它从来没有得到太多的关注,我想OpenJDK几乎带走了它存在的所有理由(GPLJavaC)。它存在的原因是什么?为什么OpenJDK会把它拿走?@SteveMcKay似乎仍然做得相当好。当然,它不是开放的,但它是一个Java到本机代码编译器。@拟人化Java最初是专有的。IIRC最终太阳