2

实际上,这个问题有点宽泛。我知道 javac 将 java 文件编译成字节码,一个类文件。所以,类文件应该包含 jvm 指令和所有这些。另一方面,查看这些指令的唯一方法是使用 javap -c 反编译类文件。但它不是反编译,对吧?因为如果是反编译,就会产生java文件。所以,我的猜测是 javac 编译 java 文件两次(这实际上不是真的,但为了简单起见,我们假设),首先是 jvm 指令,然后是字节码,所以 javap -c 从字节码反编译为 jvm 指令。Jvm 应该理解字节码,因此它不能理解指令。我在这里有点困惑。有人可以解释这里发生了什么吗?

4

2 回答 2

5

Javap 不会反编译字节码,它会反汇编它。为了解释差异,我们可以换一种方式来转换术语:编译是将人类可读的代码翻译成字节码,而汇编是将汇编指令翻译成字节码。

于 2012-07-26T09:01:12.797 回答
3

javap显示人类可读形式的 JVM 指令。JVM指令是JVM的代码。显示的是javap汇编语言。

如果您想以更易读的形式查看字节码,请使用 java 反编译器,例如jad。有几个 jad 的 UI 包装器,包括 Eclipse 的插件。

于 2012-07-26T09:02:19.567 回答