zoukankan      html  css  js  c++  java
  • 为什么 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
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    JVM—Java内存结构
    myeclipse中页面utf-8的设置
    Python-统计txt文件里面的分数
    Python-字符串常用函数
    初识C#扩展方法
    Artwork 18年中南多校第一场A
    HDU2586 How far away ?
    HDU5952 Counting Cliques 暴搜优化
    POJ 2763 Housewife Wind 树链拋分
    HDU 3966 Aragorn's Story 树链拋分
  • 原文地址:https://www.cnblogs.com/feng9exe/p/11051056.html
Copyright © 2011-2022 走看看