java源代码先编译成字节码 动态编译和解释为机器码的过程 如下图所示
编译器和解释器的协调方式
javac编译成字节码 然后通过判断是否是热点代码 如果是热点代码就直接 走JIT即时编译器
否则通过解释器逐条解释 然后成为可执行的机器码 通过操作系统到硬件
具体哪些是热点代码主要有两类
- 多次调用的方法
- 被执行多次的循环体
Hotspot 虚拟机中主要是基于计数器的热点探测 每个方法准备了两个计数器方法调用计数器和回边计数器,这两个计数器都有一个确定的阈值,计数器超过阈值后触发JIT编译
在JVM client模式下的阀值是1500次,Server是10 000次。
可以通过虚拟机参数: -XX:CompileThreshold设置。但是JVM还存在热度衰减,时间段内调用
方法的次数较少,计数器就减小
Muchas gracias. ?Como puedo iniciar sesion?