• 为什么 JVM 不用 JIT 全程编译?


    考虑到跨平台,所以无法使用AOT;

    考虑到执行效率,所以无法全部使用JIT;

    编译技术大约分为两种,一种AOT,只线下(offline)就将源代码编译成目标机器码,这是普遍用在系统程序语言中;另一种是JIT,只及时的编译,但是大部分的JIT引擎,针对的是将IR(中间代码,如JavaByteCode) 在运行时, 有针对性的翻译成机器码。

    对于JIT我们必须认识到,JIT不是简单的讲字节码翻译成机器码。一个JIT引擎要想快,主要取决于:1. 通过搜集runtime信息,识别出程序的热点(2/8原则)2. 最重要的一点,根据信息实时优化技术的使用。相反,JIT并不仅仅是个字节码到机器码的直译机器。

    那么楼主疑问,为何不直接全部翻译成机器码了?要回答这个问题,必须要提到以下两个观点:1.JIT是重型优化,本身overhead很大. 2. 最重要的,现代JIT技术必须依赖runtime信息,但要得到runtime信息,程序必须执行.下面稍微解释一下.



    作者:dianpeng
    链接:https://www.zhihu.com/question/37389356/answer/72460624
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    计算机语言发展简史
    HTML—xhtml和html5
    网络协议模型【简图】
    http协议
    URL简介
    TCP协议简介
    比较浏览器的“刷新”
    loadrunner之运行方式:线程还是进程?
    LoadRunner的函数
    LoadRunner测试结果分析
  • 原文地址:https://www.cnblogs.com/feng9exe/p/11051056.html
Copyright © 2020-2023  润新知