开发者社区> 问答> 正文

[@talishboy][¥20]JVM的jit是解释执行吗?

看了一篇文章,它解释JIT和解释器是这样的:

解释器的执行,抽象的看是这样的:

输入的代码 -> [ 解释器 解释执行 ] -> 执行结果

而要JIT编译然后再执行的话,抽象的看则是:

输入的代码 -> [ 编译器 编译 ] -> 编译后的代码 -> [ 执行 ] -> 执行结果

可是,我认为的是,如果不是热点代码,就是解释器去解释 程序计数器的指令,然后变成本地计算器可以识别的二进制机器语言,再给本机计算机去执行。 如果是热点代码,就是jit,我认为的jit也是解释器去解释一次,然后生成本地计算器可以识别的二进制机器语言,它的特点是生成了这个语言,然后放在方法区里,然后下次再执行这个热点代码,就不需要去解释了,直接把这个存在方法区里面的计算机可以识别的本地代码给本地计算器去执行。我理解是错误的吗?为什么和文章所描述的不一样呢?

展开
收起
月下丶 2018-12-14 22:03:49 2388 0
1 条回答
写回答
取消 提交回答
  • 前一个帐号wangccsy@126.com不知道怎么的就成了企业帐号,改不成个人。所以重新注册了一个个人帐号。老程序员。精通JAVA,C#,数据库,对软件开发过程和流程熟悉。考取系统分析师,项目管理师和系统架构设计师等软件资格考试认证。愿意和大家一起前进。

    1、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。

    2、JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。
    3、自适应动态编译(adaptive dynamic compilation)也是一种动态编译,但它通常执行的时机比JIT编译迟,先让程序“以某种式”先运行起来,收集一些信息之后再做动态编译。这样的编译可以更加优化。

    2019-07-17 23:21:38
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JVM实战 立即下载
JVM的GC 立即下载
基于JVM的脚本语言开发、运用实践 立即下载