好的,首先,我不想在这里发生任何形式的火焰战争或类似的事情。我更大的问题更具理论性,并且将包含一些示例。
所以,正如我所写的,我无法理解解释语言怎么可能效率很低。由于它是现代的,我将以 Java 为例。
让我们回到没有 JIT 编译器的日子。Java有它的虚拟机,它基本上是它的硬件。您编写代码,而不是将其编译成字节码以至少从虚拟机中移除一些工作,这很好。但是考虑到 RISC 指令集在硬件中的复杂程度,我什至想不出在软件模拟硬件上的方法。
我没有编写虚拟机的经验,所以我不知道它是如何在最有效的水平上完成的,但我想不出比测试匹配和执行适当操作的每条指令更有效的方法。你知道的,比如:if(instruction=="something") { (do it) } else if(instruction=="something_diffrent"){ (do it) }
等等......
但这必须非常缓慢。而且,即使有文章说 Java 在 JIT 编译器之前很慢,他们仍然说它并没有那么慢。但是为了模拟它必须花费真实硬件的许多时钟周期来执行一条字节码指令。
而且,甚至整个平台都是基于 java 的。例如,安卓。Android 的第一个版本没有 JIT 编译器。他们被解释了。但是不应该比Android慢的多吗?然而事实并非如此。我知道,当你从 Android 库中调用一些 API 函数时,它们是用机器代码编写的,所以它们很高效,所以这很有帮助。
但是想象一下,您将从头开始编写自己的游戏引擎,使用 API 来显示图像。您将需要执行许多数组复制操作,许多计算在模拟时会非常慢。
现在是我承诺的一些例子。由于我主要使用 MCU,因此我为 Atmel AVR MCU 找到了 JVM。Thay 表示 8MHZ MCU 每秒可以执行 20K java optcodes。但是由于 AVR 可以在一两个周期内完成大多数指令,因此平均可以说 6000000 条指令。这让我们知道,没有 JIT 编译器的 JVM 比机器代码慢 300 倍。那么为什么在没有 JIT 编译器的情况下让 java 如此流行呢?这不是太糟糕的性能损失吗?我只是无法理解。谢谢。