一、JVM调优介绍之JTI编译器
JTI编译器(just in time)
开发语言可以以编译方式来划定为编译型语言,解释型语言,分层编译型语言(包含解析和编译共存
先来了解下计算机如何读取代码程序,由于计算机的CPU只能执行相对少而特定的命令,而这种命令的形式就是汇编码或者二进制码。因此CPU所执行的程序都要翻译成这种指令,CPU才可以识别 并且运行。
不同产商的CPU对应可以识别的指令集也不太一样,但是新版本的CPU通常是能够兼容老版本CPU的指令集的,但是反过来,老版本的CPU是没办法兼容新版本的CPU指令集的。
而编译型语言就是利用编译器静态产生相对应CPU能识别的二进制文件,如果有什么机器能带有CPU的指令集的话 也可以识别这些编译后的二进制文件。也就是能运营对应的程序了。
至于还有一种解释型语言,这些语言的读取不需要依赖CPU去读取特定的二进制文件,而是依赖语言对应的解释器,当程序运行时,解释器会将对应的代码转换成特定的二进制码。
它与编译型语言的区别在于:编译型语言是预编译,即程序在启动之前就把代码转换成CPU能识别的二进制文件了。但是解释型语言是在程序运行的时候通过解释器将代码逐一转换成二进制语言供CPU读取。
这样2种机制就产生了对应的优缺点:编译型语言因为在程序启动之初就将代码转换成了二进制文件,所以运行程序相对较快。缺点也很明显,可移植性比较差,如果CPU无法识别对应的二进制指令就无法运行程序。
相比于编译型的程序,解释型程序依赖解释器启动,所以凡是装有解释器的计算机都可以运行对应的程序,因为由解释器将代码转换为CPU可识别的二进制文件,但是由于是运行后边运行边转换 所以程序的运行速度肯定就没有编译型程序那么快。
举个例子:一个循环代码,编译型只需要编译一次就可以一直执行这段代码,但是解释型语言就需要在每次循环体中反复的去解析代码,将它转换成二进制码。
编译型语言:如C++,Fortran。 解释型语言:如PHP,Perl。
而JAVA则是二者的结合,JAVA应用会被编译,但是不是编译成CPU的二进制码,而是编译成JAVA平台自己可以识别的二进制码,而这个编译是在程序执行是进行的,所以java的编译也称为"即时编译(JIT)"
(1).JIT之热点编译
热点编译(HotSpot):HotSpot来自于它看待代码编译的方式,当一个程序只有一部分代码经常被执行,并且程序的性能取决于执行的这些代码有对快。那么这些代码就被称为该程序的热点。
原文:https://www.cnblogs.com/culushitai/p/11114190.html