Fork me on GitHub

JIT即时编译器

一、什么是JIT?

即时编译器,负责将IL转换成本机CPU指令

 

二、JIT编译原理

①在Main方法执行之前,CLR会检测出Main的代码引用的所有类型。会导致CLR分配一个内部结构。在这个结构中,Console类型定义的每个方法都有一个对应的记录项
②Main方法首次调用WriteLine时,JITComplier函数会被调用。JITComplier函数负责将方法的IL代码编译成CPU指令
③修改最初对JITComplier的引用,使其指向内存块(包含了刚才编译好的本机CPU指令)的地址
④当Main要第二次调用WriteLine时,会直接执行内存块的代码,完全跳过JITComplier函数

第一次调用Console.WriteLine

第二次调用Console.WriteLine

 

方法仅在首次调用时才会有一些性能的损失。以后对该方法的所有调用都以本机代码的形式全速运行,无需重新验证IL并把它编译成本机代码

JIT编译器将本机CUP指令存储到动态内存中,这意味着一旦应用程序终止,编译好的代码会被丢弃

CLR的JIT编译器会对本机代码进行优化

posted on 2017-01-19 21:28  *Hunter  阅读(604)  评论(0编辑  收藏  举报

导航

AmazingCounters.com