zoukankan      html  css  js  c++  java
  • jit编译原理

    jit用以把程序全部或部分翻译成本地机器码,当需要装载某个类【通常是创建第一个对象时】,编译器会先找到其.class文件,然后将该类的字节码装入内存。

    hotspot采用惰性评估法:

    如果一段代码频繁的调用方法,或是一个循环,也就是这段代码被多次执行,JIT编译器会参与其中

    而如果一个方法从来不被执行,则不会经过JIT编译

    寄存器和主存

    其中一个最重要的优化策略是编译器可以决定何时从主存取值,何时向寄存器存值。考虑下面这段代码:

    清单 1. 主存 or 寄存器测试代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class RegisterTest {
     private int sum;
     
     public void calculateSum(int n) {
     for (int i = 0; i < n; ++i) {
     sum += i;
     }
     }
    }

    在某些时刻,sum 变量居于主存之中,但是从主存中检索值是开销很大的操作,需要多次循环才可以完成操作。正如上面的例子,如果循环的每一次都是从主存取值,性能是非常低的。相反,编译器加载一个寄存器给 sum 并赋予其初始值,利用寄存器里的值来执行循环,并将最终的结果从寄存器返回给主存。这样的优化策略则是非常高效的。但是线程的同步对于这种操作来说是至关重要的,因为一个线程无法得知另一个线程所使用的寄存器里变量的值,线程同步可以很好的解决这一问题,有关于线程同步的知识,我们将在后续文章中进行讲解。

    寄存器的使用是编译器的一个非常普遍的优化

  • 相关阅读:
    扩展LVM 逻辑卷存储空间
    Linux Shell远程执行命令(命令行与脚本方式)
    vsftpd FTP服务器配置
    初识小米Minos
    使用Libpng库实现Tiny6410显示PNG图片
    uCos-II内存管理
    应用程序调用tslib出现segmentation fault
    Linux-2.6.39在Tiny6410上的移植
    Linux-2.6.39在Tiny6410上的移植
    Tiny6410移植tslib
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9188551.html
Copyright © 2011-2022 走看看