java - 除了缓存指令之外,解释器生成的本机代码和 JIT 之间有什么区别吗?
问题描述
我无法理解解释器和 JIT 之间的区别。例如,从这个答案:
JVM是Java虚拟机——运行/解释/翻译字节码成本机机器码
JIT 是即时编译器——在运行时将给定的字节码指令序列编译为机器码,然后再本地执行。它的主要目的是对性能进行大量优化。
两者都产生本机机器代码。然后,从另一个答案:
解释器为每条指令动态生成并执行机器代码指令,而不管它之前是否已经执行过。JIT 缓存先前已解释为机器代码的指令,并重用那些本机机器代码指令。
正如我所看到的,解释器与 JIT 类似,它也将字节码转换为本机代码,不同之处在于 JIT 执行一些优化,如缓存。
这是正确的吗?还有其他主要区别吗?
解决方案
我认为上述定义不一定正确。
解释器将其 翻译成机器代码并不是“强制性的”或“必要的” 。
本质上,解释器解释. 它找到一个循环,然后“运行”该循环。这与创建执行循环的机器代码不同。
推荐阅读
- python - Tensorflow 将数据大小(形状)视为动态的,因此在节点密集期间会导致错误
- ms-access - 重新查询子表单有时只能工作
- c# - 设置 ShowLines = TRUE 时如何更改线条颜色
- scala - 读取单个文件名包含逗号的输入文本文件列表
- javascript - 将 JSON 字符串化的 javascript 对象发送到控制器时出现 POST 500 错误
- firefox - Ansible 与 SSH X11 转发
- javascript - 从未指定的 URL 获取 PHP 推送中的 JSON
- json - Scala Play 2.6:使用字段之间的约束解析 json
- datatables - 数据表 mDataProp:val 参数未定义
- react-native - React-Native 重新渲染 Flatlist