我正在看这个视频here ,其中 Robert Nicholson 讨论了 P8,这是一种 PHP 在 JVM 上的实现。在某些时候,他提到他们的目标是在 future 某个时候在性能上超越原生 PHP。
他提到了 JRuby 和 Jython,它们开始时比它们的原生版本慢,但最终超过了它们。 Quercus,JVM 上的另一个 PHP 解释器声称是 4x faster比 mod_php 还值得注意。
这是否意味着 JVM 比 C 慢的一般想法是错误的,或者原始 C 实现中是否存在缺陷?
最佳答案
Does that mean that the general idea that the JVM is slower than C is wrong, or are there >flaws in the original C implementations?
两者兼而有之
JVM 已经存在了很长时间,并且在效率方面取得了显着的进步。垃圾收集、抖动、缓存和其他领域比 PHP 等“引用”实现更先进。
任何深入了解 PHP 的人都会理解为什么很容易实现效率提升。
我个人怀疑 JVM 能否胜过 CPython……但我可能是错的……我是,这是因为 JVM GC 更快,IronPython 也是如此。性能改进可能是不依赖 C 调用堆栈,例如在无堆栈 Python 中。 The Jython site states
Jython is approximately as fast as CPython--sometimes faster, sometimes slower. Because >most JVMs--certainly the fastest ones--do long running, hot code will run faster overtime.
我可以理解这一点,因为 JVM 将在缓存生成时达到 C 性能级别,等等基本上否定了 VM 实现代码的更高级别的方面(其中很大一部分无论如何都是用 C 编写的)
在许多解释性语言中,如 PHP 和 Python 只是通往等效 C 调用和深入机器代码的桥梁。在 JVM 中,Jitter 通过将字节码简化为机器代码等价物来执行类似的功能。最终,诸如高级语法和字节码之类的中间表示无论如何通常都会减少到 C 速度或更快的 CPU 操作......所以都是一样的,只是 更多中间步骤这只会影响加载新代码时达到完全效率的延迟。在 RAM 中,您会说“真正的区别是什么?”答案只是到达那里的过程以及决定堆栈缠绕速度、垃圾收集算法、寄存器使用和逻辑表示(例如算术)的最终表示。
关于performance - Jython 和 JRuby 等 JVM 实现如何击败它们的原生实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3488675/