fer*_*tar 13 java performance jvm native-code
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)和垃圾收集?如果速度更快,还有潜伏期怎么样?
这似乎是一个矛盾,有人可以摆脱光明吗?
Edw*_*rzo 11
詹姆斯·戈斯林在书中策划了编程,他解释说:
詹姆斯:没错.这些天我们总是打败真正优秀的C和C++编译器.当你转到动态编译器时,当编译器在最后一刻运行时,你会获得两个优势.一个是你确切知道你正在运行的芯片组.很多时候,当人们编译一段C代码时,他们必须编译它以在通用x86架构上运行.你得到的二进制文件几乎都没有特别适合它们.您下载了Mozilla的最新副本,它几乎可以在任何英特尔架构CPU上运行.几乎有一个Linux二进制文件.它非常通用,它是用GCC编译的,它不是一个非常好的C编译器.
当HotSpot运行时,它确切地知道您正在运行的芯片组.它确切知道缓存的工作原理.它确切地知道内存层次结构如何工作.它确切地知道所有管道互锁在CPU中如何工作.它知道这个芯片有哪些指令集扩展.它可以精确地优化您所使用的机器.然后另一半是它实际上看到应用程序正在运行.它能够获得知道哪些事情很重要的统计数据.它能够内联C编译器永远不会做的事情.在Java世界中内联的东西非常惊人.然后,您将了解存储管理与现代垃圾收集器的工作方式.使用现代垃圾收集器,存储分配非常快.