java 编译器是否 assemble?
Does the java compiler assemble?
因此 gcc 或任何 C 编译器会将您的源代码编译为 x86 或您各自的汇编语言,然后 assemble 将程序集编译为二进制文件,然后 link 它以创建可执行文件。我的问题是 java 编译器是否包含 assembler?意思是有一个中间停止,因为我知道字节码不是机器代码,但它存储为二进制文件,也不是纯文本。我假设它只是以二进制格式存储的基于文本的字节码,但我真的不知道。
Java 编译器生成二进制格式的字节码,然后由 Java 虚拟机 (JVM) 在 运行 时将其翻译成机器码。这一步发生在 运行 时间很重要,因为这允许 Java 程序在多个平台上 运行 而无需重新编译。
您可以使用 javap
实用程序观察 class 文件中的字节码,该实用程序是 Java 开发工具包 (JDK) 的一部分。您可以 assemble 使用 Jasmin、 和 Java assembler.
等实用程序来创建自己的字节码
如您所说,Java 编译器生成字节码。然后这个字节码进入 Java 虚拟机,神奇地 "makes the code happen"。由于 JVM 是一个具有多重实现的规范,这个神奇的部分可以是即时编译或简单的解释。相关问题 here.
所以要回答你的问题,不,java 编译器不包含汇编程序。 JVM 可能包含一个但不是强制的,因为那是实现细节。
因此 gcc 或任何 C 编译器会将您的源代码编译为 x86 或您各自的汇编语言,然后 assemble 将程序集编译为二进制文件,然后 link 它以创建可执行文件。我的问题是 java 编译器是否包含 assembler?意思是有一个中间停止,因为我知道字节码不是机器代码,但它存储为二进制文件,也不是纯文本。我假设它只是以二进制格式存储的基于文本的字节码,但我真的不知道。
Java 编译器生成二进制格式的字节码,然后由 Java 虚拟机 (JVM) 在 运行 时将其翻译成机器码。这一步发生在 运行 时间很重要,因为这允许 Java 程序在多个平台上 运行 而无需重新编译。
您可以使用 javap
实用程序观察 class 文件中的字节码,该实用程序是 Java 开发工具包 (JDK) 的一部分。您可以 assemble 使用 Jasmin、 和 Java assembler.
如您所说,Java 编译器生成字节码。然后这个字节码进入 Java 虚拟机,神奇地 "makes the code happen"。由于 JVM 是一个具有多重实现的规范,这个神奇的部分可以是即时编译或简单的解释。相关问题 here.
所以要回答你的问题,不,java 编译器不包含汇编程序。 JVM 可能包含一个但不是强制的,因为那是实现细节。