025-JVM-虚拟机执行代码的模式:解释执行+及时编译JIT

177 阅读1分钟

上一篇:024-JVM-自定义类加载器
https://yuhongliang.blog.csdn.net/article/details/111567879

hotspot什么意思,就是热点探测的意思,就是jit,探测到时热点就编译为native code ,后面再执行就快了。

1. 什么是热点代码

就是执行测试多的代码,可以使用参数进行设置:

-XX:CompileThreshold = 10000  默认值1

次数超过这个值就触发及时编译!

2.默认使用的是什么执行方式?

混合模式:
在这里插入图片描述

3.个模式之间的切换和实践比较

3.1 测试代码

package com.yuhl.c2020;

/**
 * @author yuhl
 * @Date 2020/12/23 21:20
 * @Classname JIT
 * @Description 解释执行和编译执行
 */
public class JIT {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        /**
         * 混合型:4746ms
         * 解释型:没等出来
         * jit:4604ms
         */

        for(int i=0; i<10_0000; i++) {
            m();
        }

        long end = System.currentTimeMillis();

        System.out.println(end - start);
    }

    public static void m() {
        for(long i=0; i<10_0000L; i++) {
            long j = i%3;
        }
    }
}

可以在执行前修改jvm的执行模式:
在这里插入图片描述

  1. 在目前的测试情况下是没有混合模式和jit模式差别不大。
  2. 在生产环境会混合模式效率最高
  3. 纯解释不可取,太慢了。特别是在重复执行同一个方法的存在情况较多的情况下。
  4. 纯jit也不可取,可能需要大量时间在启动的时候,如果不考虑启动时间的话可以采用这种方式。
    下一篇:026-JVM-jvm对类的延时加载https://yuhongliang.blog.csdn.net/article/details/111600183