JIT

Posted tangyuanyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JIT相关的知识,希望对你有一定的参考价值。

热点代码:被多次调用的方法或循环体。(大概1w次?)

jvm两种运行模式: 执行java -version 可以看到Server或client 模式 ,其中server 模式启动较慢但是稳定运行后执行速度较快,因为server 模式采用了优化方式是重量级JVM模式

技术图片  

JVM运行时是动态解释java 字节码(.class文件),当JVM发现热点代码时会将热点代码编译成本地操作系统相关的机器码并进行优化,这种行为叫做即时编译器也就是JIT(just in time compiler)

技术图片

 

 

JIT的优化有:

1. 公共子表达式消除

2. 方法内联:JIT会将被调用的方法直接用方法体中的代码代替,减少了方法调用过程中的压栈出栈。

3. jdk7后默认开启逃逸分析,逃逸是指当一个对象在方法中被定义,而它能被外部方法引用。

    逃逸分析包括: 全局变量赋值逃逸,方法返回值逃逸,实例引用逃逸等

  

public class A{
  //全局变量
     public static Object object;
   
    public void globalVariableEscape(){//全局变量赋值逃逸 
        object = new Object();
    }
       public Object methodEscape(){ //方法返回值逃逸 
            return new Object();
      }
    public void instancePassEscape(){ //实例引用发生逃逸 
        this.speak(this);
    }
}            

  如果没有发生逃逸,JIT可以做如下优化,

  • 将对象分配在栈中而不是堆中
  • 用对象的若干个成员变量来替代对象
  • 将同步所去掉,减少锁资源开销

 

以上是关于JIT的主要内容,如果未能解决你的问题,请参考以下文章

使用hsdis查看jit生成的汇编代码

jit编译

JMH - 为啥 JIT 不能消除我的死代码

PHP8 的 JIT 是啥

『GCTT 出品』使用 Go 语言写一个即时编译器(JIT)

什么是 JIT ?