我的理解是C/C++生成在特定机器架构上运行的本机代码.相反,Java和C#等语言运行在虚拟机之上,该虚拟机将本机架构抽象化.逻辑上,由于这个中间步骤,Java或C#似乎不可能匹配C++的速度,但是我被告知最新的编译器("热点")可以达到这个速度甚至超过它.
也许这更像是一个编译问题,而不是一个语言问题,但任何人都可以用简单的英语解释这些虚拟机语言之一如何比母语更好地执行?
Java很慢.
这不仅仅是一个"都市传奇",它似乎是一个事实.由于延迟,您不会将其用于实时编码,也不会将其用于群集/并行计算.有数以千计的基准测试,特别是"Java vs C#vs C++".
http://benchmarksgame.alioth.debian.org/
根据上面的网站,不仅Java性能几乎和C一样好(远远不是其他),但Scala和Clojure(两种在JVM上运行的函数语言)都具有比OCaml,Erlang更好的性能.
而且还有很多"Java比X更快"(例如,这里有关于SO的问题:Java运行时性能与原生C/C++代码?).
因此,对于某些情况,Java似乎很快.有人可以解释原因吗?
为什么字节码可能比本机代码运行得更快,在某些情况下,给定动态代码(Scala,Clojure)和垃圾收集?如果速度更快,还有潜伏期怎么样?
这似乎是一个矛盾,有人可以摆脱光明吗?