抱歉,这是一个非常基础的计算机科学问题。Java 虚拟机生成 0 和 1 还是生成汇编语言代码?如果它生成汇编语言代码,处理器是否附带有汇编程序将其转换为 0 和 1?或者如果它生成 0 和 1,处理器是否需要汇编程序?如果需要,为什么需要?
答案1
Java编译器(不是 JVM)获取 Java 源代码(本质上仍然只是 0 和 1,但某些特定的 0 和 1 集合可以表示易于人类处理的信息,即可读文本)并将其编译为Java 字节码,即具有不同含义的0和1。
Java 字节码在概念上类似于“汇编程序”,只不过它是独立于平台的指令,旨在由Java虚拟机。JVM 充当 Java 字节码和本机字节码(即运行它的实际硬件的机器指令)之间的“翻译器” - 概念上与任天堂模拟器相同。正是它允许编译后的 Java 在任何平台上运行。
因此,直接回答您的问题:JVM 不会生成 Java 字节码;Java 编译器会生成字节码,并且 JVM 会解释该字节码并“使事情发生”。
然而,在现代,先进的 JVM 不仅仅能进行解释 - 例如,您可能听说过的“HotSpot”技术允许 JVM 动态确定 Java 字节码的哪些部分运行频繁(因此可以从加速中受益),然后获取这些部分并动态地将它们转换为完整的本机字节码(因此不再解释原始 Java 字节码,而是直接运行新的、更快的本机字节码)。这一切都对您的 Java 程序透明地发生。很久以前,Java 因“慢”而受到很多批评,但随着 HotSpot 和类似技术的出现,那些日子已经一去不复返了。
因此从某种意义上来说,现代 JVM做生成“0 和 1”,因为它们确实会从输入的 Java 指令生成额外的本机代码;但要谨慎将数据称为“0 和 1” -每一个数字数据由“0 和 1”组成(通常以 8 个二进制数字为一组,称为“字节”),从机器代码到程序源代码到文本到图像到 MP3 等等。
你可以找到一篇关于 JVM 工作原理的很好的文章这里。
有关 Java 语言、Java 字节码以及编译器和虚拟机如何运行的具体规范,可以参见语言和虚拟机规范这里。
答案2
它产生Java字节码,这是专为 JVM 设计的一套特殊指令。它与本机机器代码(零和一)类似,但并不完全相同。
看这里:Java 字节码(维基百科)(向下滚动到示例部分)。