动态编译语言与静态编译语言

Gee*_*eek 15 c java compiler-construction programming-languages compilation

Brian Goetz撰写本文的第一行让我在SO中发布这个问题.这又是一行:

为动态编译语言(如Java)编写和解释性能基准要比使用C或C++这样的静态编译语言困难得多.

我知道静态类型与动态类型语言答案.但动态编译语言与静态编译语言之间有什么区别?

Phi*_*ipp 26

动态编译和动态类型彼此没有多大关系.键入是语言语法的一部分,而编译策略是语言实现的一部分.

动态类型意味着您在声明变量时不必声明类型,并且在大多数情况下类型之间的转换会自动发生.

动态编译意味着在执行程序时将语言编译为机器代码,而不是之前.这允许,例如,即时优化 - 在应用程序运行时优化代码.JIT优化器的优势在于它具有更可靠的信息,这些信息关于代码的哪些分支最常使用以及它们通常如何使用,因为它可以在应用优化之前观察应用程序的运行情况.

动态编译是自动基准测试的一个问题,因为同一程序代码部分的多次测量可以比较完全不同的机器代码解释,因为优化器已决定在两次运行之间更改实现.


Jes*_*per 7

C和C++源代码通常由编译器编译为本机机器代码.

Java编译器将Java编译为字节码.当您运行Java程序时,实时(JIT)编译器可能会将Java字节码编译为运行该程序的CPU的本机代码.

程序运行时将程序编译为本机机器代码也称为动态编译.


Hon*_*onk 5

动态编译与静态编译是指如何以及是否可以在执行期间更改编译器生成的代码,以更改性能或程序。

静态编译不允许进行此类操作,因为所有地址和跳转都是固定的(除非您自己编写代码以在执行过程中更改指令顺序)。

动态编译允许在程序执行期间进行检查,并且所收集的信息可用于使事情运行更快。在维基百科的文章是很容易看懂和相当丰富。