Mau*_*rus 4 compiler-construction jit
可能重复:
JIT编译器与脱机编译器
所以直到几分钟前我才真正理解JIT编译器和解释器之间的区别是什么.浏览SO,我找到了答案,提出了标题中的问题.据我所知,JIT编译器具有能够使用其运行的特定处理器的优点,因此可以制作更好的优化程序.有人可以给我一个比较各自的利弊吗?
bak*_*kal 11
JIT编译器和解释器之间的区别
为了简单起见,我们只说解释器将运行字节码(中间代码/语言).当VM /解释器决定最好这样做时,JIT编译机制会将相同的字节码转换为针对相关硬件的本机代码,重点关注所请求的优化类型.
所以基本上JIT可能会生成更快的可执行文件,但需要更长时间才能编译?
我认为你缺少的是JIT编译在运行时而不是编译时发生(与"离线"编译器不同)
编译代码不是免费的,也需要时间.如果它投入时间进行编译,然后只运行几次,那么它可能没有进行过良好的交易.因此VM仍然必须决定将什么定义为"热点"并对其进行JIT编译.
请允许我举例说明Java虚拟机(JVM):
JVM可以使用开关来定义阈值,在此之后代码将被JIT编译. -XX:CompileThreshold=10000
为了说明JIT编译时间的成本,假设您将该阈值设置为20,并且拥有一段需要运行21次的代码.发生的事情是它运行20次之后,VM现在会投入一些时间进行JIT编译.现在你有来自JIT编译的本机代码,但它只会运行一次(21),这可能不会带来任何性能提升来弥补JIT进程.
我希望这说明了这一点.
这是一个JVM开关,显示在JIT编译上花费的时间-XX:-CITime"打印在JIT编译器中花费的时间"
旁注: 我不认为这是一个"大问题",只是因为你提出这个问题我想指出的.