1
44
注意:此答案在“每次运行”上下文中。每次运行程序时,代码通常都是jit的。使用 ngen 或 .NET Native 也改变了这个故事。。。 确切地 每次运行一次。它从不解释,也从不根据实际使用情况以比以前更重的优化重新编译。 当然,这可能会改变,但从v1开始就是这样,我不希望很快改变。 它的优点是它使得JIT变得更简单——不必考虑已经运行的“旧”代码,基于不再有效的前提下取消优化。 NET的优势之一是,大多数CLR语言默认情况下使方法非虚拟,这意味着可以进行更多的内联。HotSpot可以内联一个方法,直到它第一次被重写,在这一点上它取消了优化(或者在某些情况下做了一些聪明的事情,根据实际类型有条件地仍然使用内联代码)。由于需要担心的虚拟方法较少,.NET在很大程度上可以忽略无法内联任何虚拟内容的痛苦。
显然,微框架根本没有JIT,而是解释代码。这对于非常受限的设备是有意义的。(我不能说我对微观框架了解很多。) |
2
14
NET运行时总是在执行之前编译代码JIT。因此,它从未被解释过。 你可以在书中找到一些更有趣的读物 CLR Design Choices 具有 Anders Hejlsberg . 特别是:
|
3
3
在未来,对于内存不足的设备,看到一些基于跟踪的JIT将是一件好事。它将主要解释、发现热点,并将其转换为汇编程序并缓存。我认为这就是谷歌用Android JIT和 Microsoft Research SPUR: A Trace-Based JIT Compiler for CIL .. 也许其中的一部分会进入下一阶段 CLR 有一天? |
4
0
我不这么认为,我也不认为应该这样。 JIT怎么知道一个特定方法会被调用多少次?解释的频率不会影响决策吗? 我还想问JIT编译器在不解释函数本身的情况下,如何分析函数以确定解释是否是最好的。考虑到这一事实(该方法至少有一个过程已经发生),简单地编译每个方法不是更好,以减少试图确定哪些方法首先被编译的开销吗? |
ma3oun · 如何嵌套numba jitclass 8 年前 |
Paul J. Lucas · 从LLVM IR访问结构成员和结构数组 9 年前 |
Neo · 在JIT的帮助下,程序运行的时间越长,速度越快?[已关闭] 9 年前 |
galinette · LLVM JIT:如何禁用自动函数解析? 10 年前 |