关于传统解释器,编译器和JIT编译器解释器的说明

关于传统解释器,编译器和JIT编译器解释器的说明,第1张

关于传统解释器,编译器和JIT编译器/解释器的说明

免责声明:将所有这些与一粒盐一起食用;这太过简单了。

1:您是对的,因为计算机本身不理解代码,这就是为什么需要JVM本身的原因。假装

XY
意味着“将堆栈中的前两个元素相加并推入结果”。然后将实现JVM,如下所示:

for(byte bytepre : preToExecute) {    if (bytepre == XX) {        // ...do stuff...    } else if (bytepre == XY) {        int a = pop();        int b = pop();        push(a+b);    } else if (bytepre == XZ) {        // ...do stuff...    } // ... and so on for each possible instruction ...}

JVM已在计算机的本机代码中实现了每条单独的指令,并从本质上查找了字节码的每个块以了解如何执行该指令。通过JIT编写代码,可以通过省略这种解释(例如,查找应该如何处理每条指令)来实现大幅度的加速。那,和优化。

2:JIT并没有真正运行代码;一切仍在JVM中运行。基本上,JIT在适当的时候将字节代码块转换为机器代码。当JVM遇到它时,它会认为“哦,嘿,这已经是机器代码了!亲爱的,现在我不必仔细检查每个字节,因为CPU可以自己理解它!我只是抽水,一切都会神奇地自行工作!”。

3:是的,可以通过这种方式预编译代码,以避免早期的解释和JITting开销。但是,这样做会损失一些非常有价值的东西。您会看到,当JVM解释代码时,它还会保留有关所有内容的统计信息。然后,当它对代码进行JIT时,它会知道使用不同部分的频率,从而使它可以在重要的地方对其进行优化,从而使常见的东西更快,而稀有的东西却被牺牲了,从而提高了整体性能。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5501836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存