JVM - 【执行引擎】解释器与JIT

执行引擎 - 解释器与JIT

  • Execute Engine
  • Interpreter
  • Just-In-Time Compiler
  • [Java HotSpot VM Options]

一:什么是解释器与JIT?

1> 解释器

解释器将字节码直接翻译为机器指令执行(Java);
在Python中不存在字节码,cPython会直接将python程序翻译为机器指令执行。

2> JIT

Just-In-Time 即时编译器,属于后端编译器(程序运行时动态编译),常与解释器配合使用,互惠互利。

二:HotSpot VM执行引擎策略

JVM - 【执行引擎】解释器与JIT_第1张图片     HotSpot虚拟机执行引擎采用解释器与JIT混合使用策略,程序响应速度快。
在执行过程中,执行引擎会进行热点探测以找出热点代码,并对热点代码进行即时编译得到机器指令并缓存当前热点代码(缓存的热点代码存储于Metaspace),当热点代码被再次调用时,机器指令会完成栈上替换从而减少方法块的重复解释提高程序执行效率。

     J Rocket虚拟机(2008年被Oracle收购,2014年发布JDK1.8,Perm->Metaspace)执行引擎中没有解释器,程序响应/启动速度较慢,但是一旦程序运行起来效率将很高(J Rocket是世界上运行最快的虚拟机

三:热点探测

  • 方法调用计数器(Invocation Counter)
    • 统计方法被调用次数
      • 计数器会有半衰期,可通过-XX:+/-UseCounterDecay选择开启或关闭
  • 回边计数器 (Back Edge Counter)
    • 统计方法内部循环体执行次数
      JVM - 【执行引擎】解释器与JIT_第2张图片

JIT针对HotSpot不同模式有着不同的优化策略:
JVM - 【执行引擎】解释器与JIT_第3张图片

-client

-XX:CompileThreshold=1500

-XX:+UseCounterDecay

-server

-XX:CompileThreshold=10000

-XX:+UseCounterDecay

JVM - 【执行引擎】解释器与JIT_第4张图片

-XX:CounterHalfLifeTime

        Error: VM option 'CounterHalfLifeTime' is develop and is available only in debug version of VM.

四:HotSpot VM设置程序执行方式

  • -Xint
  • -Xcomp
  • -Xmixed
    JVM - 【执行引擎】解释器与JIT_第5张图片
package xyz.xx.chapter12;

/**
 * 測試解釋器模式和JIT模式
 *      -Xint     :7566ms
 *      -Xcomp    :345ms
 *      -Xmixed   :391ms
 */
public class C1C2Test1 {
     

    public static void main(String[] args) {
     
        long start = System.currentTimeMillis();

        testPrimeNumber(1000000);

        long end = System.currentTimeMillis();
        System.out.println("耗時:"+(end-start)+"ms");
    }

    public static void testPrimeNumber(int count){
     
        for(int i=0;i<count;i++){
     
            x:for(int j=2;j<100;j++){
     
                for(int k=2;k<=Math.sqrt(j);k++){
     
                    if(j%2==0){
     
                        continue x;
                    }
                }
                // System.out.println(j);
            }
        }
    }
}

你可能感兴趣的:(JVM,java,jvm,执行引擎)