我仍然不清楚通过JIT编译器将字节码编译为机器代码的概念。我想知道为什么它会产生比非JIT解释器更快的代码。有人可以给我一个很好的例子说明该过程如何完成吗?

最佳答案

假设您有一个循环,需要执行一百万次。

一个“ true”的解释器需要在循环的每次迭代中查看其字节码,并弄清楚该代码对系统状态(调用等)应该产生什么影响。

JIT编译器仅查看一次字节码1,然后将其编译为本地代码,然后可由计算机直接理解,无需进一步翻译。翻译需要时间,因此,如果您一次只能翻译一次,则效率更高。

举一个真实的例子:如果您有一本英语小说,并且有一些对它感兴趣的法国人,您可以将这本书赠给既懂两种语言又可以大声朗读每个人的人。或者,您可以让那个人拿走这本书,将其翻译成法语,然后再给每个法国人一个法语副本。如果只有一个人对这本书感兴趣,那么即时翻译会更高效-不需要复制编辑器,布局专家,打印机等...但是如果您有很多人想要阅读本书,然后进行更彻底的一次性翻译
更有意义。



1某些JIT,包括HotSpot中的JIT,实际上会根据用途,对同一代码进行几次JIT编译,并进行不同程度的优化。

07-24 09:46
查看更多