JVM是否将字节码解释为汇编语言

M.T*_*M.T 3 java jvm

我和jvm很困惑.
jvm究竟需要什么才能将totycode和解释为本机代码的本机代码汇编语言?

Ell*_*sch 5

本机代码(或机器代码)是编译汇编语言的内容.扩展宏,然后将助记符OP代码转换为二进制机器代码.JIT不使用宏,它直接生成机器代码(没有汇编程序).

  • @MT No.字节码有点像装配.JIT生成机器代码(也像装配一样).它们实际上都不是汇编语言或汇编语言. (3认同)
  • jvm input = bytecode(独立于平台),jvm output =目标体系结构的二进制代码. (2认同)

T.J*_*der 5

是本机代码汇编语言?

汇编语言是编写将代码的方式组装(由汇编)成机器代码,这是写入可执行文件和等。也就是说,汇编代码是人类的源代码,只是非常低的级别。机器代码是在该源代码上运行汇编程序的结果。(这类似于您编写像C ++这样的高级语言并使用编译器将编译为机器代码的情况。)

jvm的确切功能是使用bytycode并将其解释为本地代码

一个JVM 可以写,只是解释字节码,但现代的JVM不这样做; 他们有一个内置的即时编译器(JIT),该编译器接收字节码,并有效地将其即时汇编为机器代码。实际上,Sun的JVM具有两个阶段的JIT:一个阶段运行得非常快(因此,应用程序和类在运行时会迅速转换为机器代码,以避免启动延迟),另一个阶段是进行积极的优化,这当它在代码中标识“热点”(运行频繁的代码)时使用(以便对性能至关重要的代码快速运行)。

因此,现代的JVM从.class文件中读取字节码,通过JIT运行该字节码以将其编译为机器代码,然后让计算机运行该机器代码。在这样做的同时,一个好的人监视热点并积极地对其进行优化,从而创建更高效​​的新替代机器代码。