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

162 阅读1分钟

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

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

-XX:CompileThreshold = 10000  默认值1

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

混合模式:

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 也不可取,可能需要大量时间在启动的时候,如果不考虑启动时间的话可以采用这种方式。

自律的艰辛总甜过懊悔的苦果!
专注于 java 后端技术及解决方案,善于总结,分享!
自律的艰辛总甜过懊悔的苦果!
专注于 java 后端技术及解决方案,善于总结,分享!
自律的艰辛总甜过懊悔的苦果!
专注于 java 后端技术及解决方案,善于总结,分享!