Java之JIT编译器的总结
来源:互联网 发布:网络考试系统软件 编辑:程序博客网 时间:2024/06/06 16:29
Just In Time即时编译器。当JVM发现某个方法或代码块运行频繁时,就会把这段代码认定为热点代码,通过JIT在运行时将这些代码编译成本地机器码,并进行相关优化。
在JIT未出现之前,字节码指令被解释器转译成对等的微处理器指令,并根据转译后的指令先后顺序依次执行,由于一个Java指令可能会被转译成十几或几十个对等的微处理器指令,这种模式执行的速度特别慢。
基于这种瓶颈,JIT技术应运而生了。对于需要使用JIT进行编译的字节码指令,相对于使用解释器来解释执行的方式来说,JIT只需要额外花费少许的编译时间,就可以提高代码执行的效率,节省执行时间。但是对于执行次数少的指令,也采用JIT进行编译则编译时额外花费的时间,加上执行的时间,不比解释执行的时间短。
基于解释器和即时编译器各自有其适应的优势特点,将两者集合起来,就是所谓的动态编译器dynamic compiler。动态编译器具体做法为,使用JIT执行热点字节码指令(被多次调用的方法或循环体的字节码指令),使用解释器执行非热点代码)。而至于热点字节码的判定,目前有两种算法,一种是基于采样的热点探测(周期性地检查各个线程的栈顶,经常出现在栈顶的方法代码就是热点代码),一种是基于计数器的热点探测(每个方法或其中的代码块对应有一个计数器,用来统计执行的次数,当执行次数超过一定阈值时则被认为是热点方法)。HotSpot虚拟机使用的是基于计数器的热点探测方法,它为每个方法准备了两个计数器,分别用于探测方法的调用次数和方法中循环体代码执行的次数,当计数器的值超过了阈值,则会触发JTI编译。触发了JIT编译后的代码,并不会停下来等待JIT编译完,而是继续解释执行,JIT编译的机器码等到下一次调用该方法或代码时才会被使用。
- Java之JIT编译器的总结
- java即时编译器JIT之简单介绍
- 【Java 虚拟机探索之路系列】:JIT编译器
- [Java Performance] JIT编译器简介
- 关于java JIT(即时编译器)的基本认识
- RyuJIT:下一代的JIT编译器
- JVM的即时编译器JIT
- 探讨JVM的JIT 编译器
- JIT编译器
- JIT编译器
- java 解释器与JIT编译器
- HotSpot的JIT的两种编译器
- 浅谈对JIT编译器的理解。
- JAVA领域的JIT
- 《java performance》读书笔记之JIT
- Java性能优化指南系列(三):理解JIT编译器
- Java性能优化指南系列(三):理解JIT编译器
- j9vm JIT编译器
- gdb 调试多进程、多线程的小栗子
- 数学基础——导数
- C++中doulbe/float/int转为CString方法
- Mybatis3 快速入门
- 单片机学习札记5---定时器和中断配置
- Java之JIT编译器的总结
- 大部分人都不会注意到的JavaMail天坑
- MySQL的select语法
- ReactiveCocoa 的RACMulticastConnection使用
- 7.2 7.3 二叉树的概念和性质、存储
- 顺序队列(设计成环形队列)
- 动态代理学习笔记
- Linux ln -sf 的用法
- LeetCode 之 Container With Most Water