代码之家  ›  专栏  ›  技术社区  ›  cib

即时编译和动态编译有什么区别?

  •  1
  • cib  · 技术社区  · 6 年前

    wikipedia明确指出,“JIT编译是动态编译的一种形式,[…]” [1] . 但这两个术语难道不是简单的同义词吗?这两者有什么区别?

    是否有任何动态编译的示例也不是JIT编译?如果做不到这一点,是否存在动态编译一词比JIT编译更合适的情况?

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

    我个人的印象是,JIT编译是一个很流行的术语,因为这就是Java VM中的动态编译的名称。这个概念越来越流行,其他程序运行时开始复制它,并将其命名为JIT编译。动态编译似乎是一个早于这一发展的术语,并且大多出现在较旧的科学出版物中。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Hadi Brais    6 年前

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

    实时(JIT)编译,也称为动态翻译。。。

    然后它说:

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

    这也表明动态翻译也是动态编译的一种形式,这没有多大意义。

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

    然而,Java编程语言是在1995年左右发布的,Java文档是第一个使用这个术语的 即时编译 JIT编译器 . 我能找到的最早的此类文件是 this ,尽管第一个Java JIT编译器是在1996年开发的。我看到许多在这段时间内发表的论文都交替使用了这两个术语。

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