实际上,问题是更广泛的。 我知道Javac将Java文件编译为字节码,一个类文件。因此,类文件应包含JVM指令和所有这些。另一方面,查看这些指令的唯一方法是使用Javap -c进行分解类文件。但它并没有分解,对吧?因为如果它是分解,它将生成Java文件。所以,这里的猜测是Javac编译了Java文件,如2次(实际上并不是真的,但是让我们假设为简单起见),首先到jvm指令,然后将javap -c从字节码分解到jvm指令。JVM应该了解字节码,因此无法理解指令。我有点困惑。有人可以解释这里发生了什么吗?

有帮助吗?

解决方案

javap不会 decompile 字节码,它拆卸它。要解释差异,我们可以以另一种方式切换术语:编译是将人类可读代码转换为字节码,而组件将装配指令转换为字节码。

其他提示

javap显示人类可读形式的JVM指令。JVM指令是JVM的代码。什么生成的世代icetagcode显示是汇编语言。

如果要以更可读的表单查看字节代码,请使用Java Decompiler,例如Java Decompiler。 jad 。JAD有几个UI包装器包括用于Eclipse的插件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top