JIT

160 阅读1分钟

什么是JIT

JIT也就是即时编译 在运行时 动态 进行编译。将某些程序代码(通常是热点代码)从解释执行转换为本地机器码,以便直接在cpu上执行,无需再次解释执行
注:高级语言->计算机cpu执行的机器语言有两种方式 编译解释,java中的编译成字节码 并不能直接在机器上运行,jvm中内置了 解释器,在运行时对字节码解释翻译成 可直接运行的机器码

JIT编译器的工作流程

  • 解释执行

    解释java编译后的字节码 成为机器码 并执行

  • 热点探测

    在解释执行的过程中收集统计信息 如 调用频率、循环次数等

  • 即时编译

    一旦某段代码被确定为热点代码,JIT会对热点代码即时解释为 机器码,并换存为本地机器码

  • 执行本地机器码

    当再次调用的时候就会使用本地存在的机器码

优化点

  • 方法内联的优化

将被调用的方法复制到调用的方法中,避免入栈和出栈的次数

  • 锁消除

在成员方法中使用的 线程安全的stringbuffer和非安全的stringbuilder 性能都差不多

  • 锁粗化

嵌套锁 粗化

  • 热点代码,即时编译为机器码进行本地存储调用
  • 逃逸分析

运行时判定对象是否会 逃逸出当前线程/方法,从而确定是栈上分配 还是 堆上分配