我对JVM感到困惑。
JVM的确切作用是将字节码解释为本地代码吗?本地代码是汇编语言吗?请注意,JVM不会将字节码转换为可执行文件。
我对JVM感到困惑。
JVM的确切作用是将字节码解释为本地代码吗?本地代码是汇编语言吗?请注意,JVM不会将字节码转换为可执行文件。
本地代码是汇编语言吗?
汇编语言是一种编写代码的方式,它将被汇编器“汇编”成机器代码,这就是写入可执行文件等内容的内容。也就是说,汇编代码是人类可读的源代码,但是在很低的层次上;机器代码是运行汇编器时的结果。(这类似于当您使用像C++这样的高级语言进行编写并通过编译器将其编译为机器码。)
JVM 将 byte code 解释成本地代码是如何实现的?
JVM可以被编写成只解释字节码的形式,但是现代JVM不会那么做;它们有内置的即时编译器 (JIT),可以将字节码即时转换为机器代码。事实上,Sun的JVM 有一个两阶段 JIT:第一阶段运行速度非常快(因此应用程序和类在运行时可以快速转换为机器代码,以避免启动延迟),另一阶段会启动,该阶段会对代码进行激进优化,并在代码中识别到"热点" (经常运行的代码) 时使用。
因此,现代JVM从.class文件中读取字节码,通过JIT编译成机器码,然后让计算机运行该机器码。在此过程中,优秀的JVM会监控“热点”进行激进优化,并创建更有效的新替代机器代码。
本地代码(或机器码)是汇编语言编译后的结果。宏被展开,然后助记符 操作码 被翻译成二进制机器码。JIT不使用宏,它直接生成机器码(无需汇编器)。