• Interpreter ,JIT ,AOT


    Interpeter(解释器)

    通俗的说解释器就是将程序员编写的代码一条条的转译执行,在解释执行代码的同时,也维护了一个栈去存放method的传入参数、局部变量、保存当前线程的context信息。

    解释器的优势在于占用内存少(可以理解为解释一条扔一条),劣势就是执行效率低下。

    JIT(动态编译器)

    一般JIT会和一个解释器混合执行代码,JIT的作用是将热点代码编译成机器指令,很明显这样做的缺点就是编译后的机器代码会占用一些存储空间。所以,什么样的代码算是热点代码呢?

    举常见的Method-Based JIT的栗子吧,这种JIT在代码解释过程中会针对每个method做profiling(检测),通俗点就是用一个计数器对函数调用次数做统计,方法每调用一次,计数器加1,

    调用次数突破threshold(门槛值)之后JIT就会对该方法做编译,这样下次再调用这个方法的时候就可以直接执行机器指令,从而提高执行效率

    AOT(静态编译器)

    典型的代表就是C和C++语言的编译器。它最大的特点就是在代码运行之前先将所有代码编译为机器指令,显然这样做的优点是执行速度快

    其他要说的

    JIT和AOT指的是程序运行方式,和编程语言并非强关联的,有些语言既可以以JIT方式运行也可以以AOT方式运行,如Java、Python,它们可以在第一次执行时编译成中间字节码、然后在之后执行时可以直接执行字节码,也许有人会说,中间字节码并非机器码,在程序执行时仍然需要动态将字节码转为机器码,是的,这没有错,不过通常我们区分是否为AOT的标准就是看代码在执行之前是否需要编译,只要需要编译,无论其编译产物是字节码还是机器码,都属于AOT。
  • 相关阅读:
    python基础集结号
    3,jieba gensim 最好别分家之最简单的相似度实现
    2,PyAudio 实现录音 自动化交互实现问答
    1,百度云接口
    16,Flask-Migrate
    移动端web开发 尽量哪些标签 常用标签及注意事项
    flex布局
    -webkit-box
    网页图片jpg,gif,png对比。
    原生判断是否存在某个类,手机端事件,手机端测试
  • 原文地址:https://www.cnblogs.com/Jean90/p/16291817.html
Copyright © 2020-2023  润新知