【问题标题】:What is the difference between Just-in-time compilation and dynamic compilation?即时编译和动态编译有什么区别?
【发布时间】:2018-07-11 21:27:09
【问题描述】:

具体来说,维基百科指出“JIT 编译是一种动态编译形式,[...]”[1]。但这两个词不就是同义词吗?两者有什么区别?

有没有动态编译的例子不是 JIT 编译?或者如果做不到这一点,是否存在动态编译这个术语比 JIT 编译更合适的情况?

这两个术语似乎都是指在运行时执行编译。这两个术语似乎都描述了源代码编译和字节码编译。这两个术语似乎都涵盖了运行时优化。

我自己的印象是,JIT 编译是一个变得流行的术语,因为这就是 Java VM 中动态编译的名称。这个概念越来越流行,其他程序运行时开始复制它,并用相同的名称称其为 JIT 编译。动态编译似乎是早于该开发的术语,并且主要出现在较早的科学出版物中。

【问题讨论】:

    标签: compiler-construction jit dynamic-compilation


    【解决方案1】:

    诚然,维基百科令人困惑。首先它说:

    即时(JIT)编译,也称为动态翻译...

    然后它说:

    JIT 编译是动态编译的一种形式,允许自适应 动态重新编译等优化...

    这也说明动态翻译也是动态编译的一种形式,意义不大。

    动态编译这个术语是标准且唯一的术语,指代 1995 年之前在运行时编译代码的技术系列。例如,查看 1985 年的 this 论文讨论 Prolog 的动态编译。很容易找到许多 1995 年以前的论文使用该术语。

    然而,Java 编程语言是在 1995 年左右发布的,Java 文档首先使用术语 JIT 编译JIT 编译器。我能找到的最早的此类文档是 this,尽管第一个 Java JIT 编译器是在 1996 年开发的。我看到在那个时间范围内发表的许多论文可以互换使用这两个术语。

    我还记得我读过的一些论文认为 JIT 编译是一种动态编译。

    【讨论】:

      猜你喜欢
      • 2017-02-11
      • 2011-01-26
      • 2014-03-30
      • 2014-08-10
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多