由于其跨平台能力,Java中的开销是否比C#更多?

时间:2014-08-08 01:45:41

标签: java jvm

有人告诉我,Java有更多的开销,因为你基本上可以在大多数操作系统上运行它,并且C#没有那个开销,所以它可以以接近C ++的速度执行。

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

2 个答案:

答案 0 :(得分:8)

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

JVM是Java虚拟机。但它有几个不同的版本。有HotSpot(原版),OpenJDK,然后可以从BEA,Apache Harmony和JRockit查看a bunch more

对于C#,有CLR,但也有Mono的运行时。随着时间的推移,还有others被遗弃。

JavaScript(因为我在那里折腾)有一整个army of runtimes。其中一些运行时比其他运行时更快。

运行时比其他运行时更快或更慢 - 甚至可能是同一种语言。但那个是跨越平台的#39;而另一个并不足以说明一个人比另一个人更快。还有许多其他工作正在进行,并且可以构建基准测试,显示每个组合比每个​​组合更快。

更进一步,人们可以看到跨越多个运行时的语言。您已经使用CPython作为其默认实现的Python - 但是在JVM中运行的Jython和在CLR中运行的IronPython。可以使用RubyIronRubyJRuby或Clojure找到类似示例,可以通过ClojureScript将其编译为JavaScript,然后在其中一个JavaScript运行时上运行,而不是JVM。

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

答案 1 :(得分:2)

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

Java语言本身绝对是为了定位JVM而编写的,但据我所知,实际上并没有必须的要求。据我所知,编写一个生成本机代码而不是Java字节码的Java编译器是完全可能的。 (这完全是假设的。我从来没有听说过任何人正在做 - 这一点很少。目前JVM的实现几乎和本机代码一样快,并且由此带来的任何好处将远远超过它所带来的可携带性的损失。)

由于C#没有完全拥有VM,因此情况进一步复杂化,如here所述。因此,您可以进行的最佳比较是" 这个实现的JVM运行这个 Java代码比 实现的更快。 NET框架运行 C#代码?"

最后,除非非常相似的代码存在明显的速度差异,否则比较并不是因为变量太多而引人注目。使用不同的JVM,或不同的Java编译器,或不同的.NET实现,或不同的C#编译器,或在不同的机器上运行相同的代码,并且数字会发生变化。