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

时间:2018-02-01 14:09:04

标签: compiler-construction jit dynamic-compilation

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

是否有任何动态编译的例子都不是JIT编译?或者失败了,是否存在动态编译这个术语比JIT编译更合适的情况?

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

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

1 个答案:

答案 0 :(得分:1)

不可否认,维基百科令人困惑。首先它说:

  

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

然后它说:

  

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

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

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

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

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

相关问题