Mid*_*lue 20 java jvm bytecode
我多次听说Java实现了JIT(即时)编译,它的跨平台可移植的字节码得到了JVM的"解释".但是,我真的不知道字节码是什么,以及JVM在Java语言架构中的实际意义; 我想更多地了解他们.
Geo*_*edy 45
JVM(Java虚拟机)具有与真实机器类似的指令集.给出该指令集的名称是Java Bytecode.它在Java虚拟机规范中描述.其他语言在执行前被转换为字节码,例如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字节码.
Eri*_*lje 14
字节码是源代码和实际机器代码之间的一个步骤.JVM采用字节码并将其转换为机器代码.
JIT指的是JVM在执行程序时动态执行此转换的事实,而不是一步(就像传统的编译/链接语言,如C或C++)
字节码的重点在于您获得比严格解释的语言(例如PHP)更好的性能,因为字节码已经部分编译和优化.此外,由于字节码不需要由CPU直接解释,因此不需要将其绑定到任何特定的CPU架构,这使其更具可移植性.
当然缺点是它通常比本机编译的应用程序慢一点,因为JVM仍然需要在将字节码转换为机器代码方面做一些工作.