我正在看这部视频 这里, ,罗伯特·尼科尔森(Robert Nicholson)讨论了P8,这是JVM上PHP的实施。在某个时候,他提到他们的目标是将来在某个时候超越本地PHP。

他提到了Jruby和Jython,最初的速度比其本土慢,但最终超越了他们。 Quercus,JVM上的另一个PHP解释器声称为 更快4倍 比mod_php,也值得一提。

这是否意味着JVM比C慢的一般想法是错误的,或者原始C实现中存在缺陷?

有帮助吗?

解决方案

这是否意味着JVM比C慢的一般想法是错误的,或者原始C实现中存在>缺陷?

两者

JVM已经存在了很长时间,并在效率方面取得了重大进展。与“参考”实现(例如PHP)相比,垃圾收集,jitting,缓存和其他区域更为先进。

在PHP引擎盖下看的任何人都将了解为什么效率提高很容易实现。

我个人怀疑JVM能否胜过Cpython ...但是我可能错了... 我是,这取决于JVM GC的速度更快,也是Ironpython. 。性能提高可能是对C呼叫堆栈(例如在无stackless Python中)的不依赖。 Jython网站指出

Jython的速度大约与Cpython一样快 - 有时更快,有时更慢。因为>大多数JVM(肯定是最快的) - 运行时间很快,热代码将加时性运行速度更快。

我可以像CACHES生成时达到C的事实,因为CACHES生成,因此基本上否定了VM实现代码的更高级别(无论如何,其中很大一部分是在C中写成的)

在许多解释的语言中,PHP和Python只是等效C调用并潜入机器代码的桥梁。在JVM中,抖动通过将字节码减少到机器代码等效物来执行相似的函数。最终,中间表示(例如高级语法和字节码)通常会简化为C速或更快的CPU操作...因此,它都是相同的,只是 更多中间步骤 加载新代码时,只会影响完全效率的延迟。 RAM中有一个观点,您说“真正的区别是什么?”答案仅是将其列入那里的过程,以及决定堆叠绕组速度,垃圾收集算法,注册用法和逻辑表示的最终表示形式,例如算术。

其他提示

这并不难。如果您在C中编写实施方式,则必须编写自己的GC,JIT等(要快速有效)。为了做到这一点,您需要真正有很多经验的人,并给他们很多时间。

我将在这里围绕一个肢体说,说当前的PHP实施(不是基于内部工作的知识,而是基于我所看到的基准,而对人们对PHP的了解的人则不说明)。艺术。 Facebook试图解决这个问题,但他们以罕见的方式做到这一点(由于有特殊的需求,并且典型地使用了PHP http://www.stanford.edu/class/ee380/abstracts/100505.html).

概括:因此,如果有人在Java(或任何快速VM)中实现PHP,他不需要编写超级GC或JIT即可快速“仅”编译器(可以简单)。

关于虚拟机的作用有一些暗示 这里. 。例如,看起来Java虚拟机首先检查字节码的哪些部分最频繁地执行,然后将相关部分编译为本机代码(然后应以与EG编译C代码相似的速度执行)。

顺便说一句,PHP是否会编译为字节码,还是只是使用内存数据结构来解释?通过将PHP首先转换为Java Virtual Machine可执行的字节码,从现有的(语言 - 无稳定)优化的字节码执行中自动受益。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top