相关疑难解决方法(0)

即时编译与提前编译有什么好处?

我最近一直在考虑这个问题,在我看来,JIT编译的大多数优点应该或多或少地归结为中间格式,并且jints本身并不是生成代码的好方法.

所以这些是我经常听到的主要的JIT编译参数:

  1. 即时编译可实现更高的可移植性.这不是因为中间格式吗?我的意思是,一旦你的虚拟字节码在你的机器上得到它,没有什么能阻止你将它们编译成本机字节码.可移植性是"分发"阶段的问题,而不是"运行"阶段.
  2. 那么,那么在运行时生成代码呢?嗯,同样适用.没有什么可以阻止您将实时编译器集成到您的本机程序中以实现真正的及时需求.
  3. 但运行时只需将其编译为本机代码一次,并将生成的可执行文件存储在硬盘驱动器上某处的某种缓存中.当然可以.但它在时间限制下优化了你的程序,而且从那时起它并没有让它变得更好.见下一段.

它不像提前编译也没有优势.即时编译有时间限制:在程序启动时,您不能让最终用户永远等待,因此需要权衡某些事情.大多数时候他们只是减少优化.我的一个朋友有分析证据表明内联函数和"手动"展开循环(在过程中混淆源代码)对他的C#号码运算程序的性能产生了积极影响; 在我这方面做同样的事情,我的C程序填写相同的任务,没有产生任何积极的结果,我相信这是由于我的编译器允许进行广泛的转换.

然而,我们被jitted程序包围.C#Java无处不在,Python脚本可以编译成某种字节码,我确信其他一些编程语言也是如此.我必须有一个很好的理由让我失踪.那么什么使即时编译如此优于提前编译?


编辑为了清除一些混淆,也许重要的是要声明我全都是可执行文件的中间表示.这有很多优点(实际上,实时编译的大多数参数实际上是中间表示的参数).我的问题是如何将它们编译为本机代码.

大多数运行时(或编译器)都倾向于及时或提前编译它们.由于编译器有更多的时间来执行优化,因此提前编译看起来像是一个更好的替代方案,我想知道为什么微软,Sun和所有其他人都在反过来.我对与分析相关的优化有点怀疑,因为我对即时编译程序的经验表现出很差的基本优化.

我用了一个例子与C语言代码,只是因为我需要的例子名列前茅的时间编制与刚刚在时间编译.C代码没有发送到中间表示的事实与情况无关,因为我只需要表明提前编译可以产生更好的即时结果.

jit compilation

68
推荐指数
4
解决办法
2万
查看次数

JIT编译器与离线编译器

是否存在JIT编译器比其他编译器(如C++)更快的情况?

您认为将来JIT编译器只会看到次要的优化,功能但是会遵循类似的性能,还是会有突破性的优势使其无限优于其他编译器?

看起来多核心范式有一些希望,但它不是普遍的魔力.

任何见解?

.net c# c++ compiler-construction jit

37
推荐指数
3
解决办法
7952
查看次数

什么时候java比c ++快(或者什么时候JIT更快然后预编译)?

可能重复:
JIT编译器与脱机编译器

我听说在某些情况下,由于JIT优化,Java程序或java程序的某些部分能够比C++(或其他预编译代码)中的"相同"代码执行得更快.这是因为编译器能够确定某些变量的范围,避免一些条件并在运行时拉出类似的技巧.

你能给出一个(或更好 - 一些)例子吗?并且可能概述了编译器能够优化字节码超出预编译代码可能性的确切条件?

注意:这个问题不是将Java与C++进行比较.它关于JIT编译的可能性.请不要燃烧.我也不知道有任何重复.如果你是的话请指出来.

java compiler-construction optimization performance jit

17
推荐指数
3
解决办法
2万
查看次数