我听到很多次
Java实现JIT(即时)编译及其在平台上可移植的字节码被JVM“解释”.但是,我不知道字节码是什么,JVM在Java语言架构中是什么意思?我想更多地了解他们.
解决方法
JVM(Java虚拟机)具有与真实机器一样的指令集.该指令集的名称是Java字节码.它在
Java Virtual Machine Specification中描述.其他语言在执行之前被翻译成一个字节码,例如ruby和python. Java的字节码处于相当低的水平,而python的级别更高.
解释和JIT编译是执行字节码的两种不同策略.解释过程会一次一个地对每个指令中编码的虚拟机状态进行更改. JIT编译将字节码转换为执行等效操作的主机平台的本机指令.
解释通常很快启动但在执行时缓慢,而JIT有更多的启动开销,但运行速度更快.现代JVM使用解释和JIT技术的组合来获得两者的好处.字节码首先被解释,而JIT在后台翻译它. JIT编译完成后,JVM切换到使用该代码而不是解释器.有时JIT编译可以产生比C和C使用的提前编译更好的结果,因为它更具动态性. JVM可以跟踪代码被调用的频率以及通过代码的典型路径,并在程序运行时使用此信息生成更有效的代码. JVM可以切换到这个新代码,就像最初从解释器切换到JIT代码一样.
就像有其他语言编译为本地代码,如C,C,Fortran;有其他语言的编译器输出JVM字节码.一个例子是Scala语言.我相信groovy和jruby也可以转换成java字节码.