看了一篇文章,它解释JIT和解释器是这样的:
解释器的执行,抽象的看是这样的:
输入的代码 -> [ 解释器 解释执行 ] -> 执行结果
而要JIT编译然后再执行的话,抽象的看则是:
输入的代码 -> [ 编译器 编译 ] -> 编译后的代码 -> [ 执行 ] -> 执行结果
可是,我认为的是,如果不是热点代码,就是解释器去解释 程序计数器的指令,然后变成本地计算器可以识别的二进制机器语言,再给本机计算机去执行。 如果是热点代码,就是jit,我认为的jit也是解释器去解释一次,然后生成本地计算器可以识别的二进制机器语言,它的特点是生成了这个语言,然后放在方法区里,然后下次再执行这个热点代码,就不需要去解释了,直接把这个存在方法区里面的计算机可以识别的本地代码给本地计算器去执行。我理解是错误的吗?为什么和文章所描述的不一样呢?
1、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。
2、JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。
3、自适应动态编译(adaptive dynamic compilation)也是一种动态编译,但它通常执行的时机比JIT编译迟,先让程序“以某种式”先运行起来,收集一些信息之后再做动态编译。这样的编译可以更加优化。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。