Jython和Jruby等JVM实施如何击败其本地同行?
-
28-09-2019 - |
解决方案
这是否意味着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可执行的字节码,从现有的(语言 - 无稳定)优化的字节码执行中自动受益。