java 字节码是直接翻译成汇编代码吗?
Is java bytecode translated directly to assembler code?
我知道javac
将*.java
个文件编译成*.class
个文件,这些文件的内容叫做字节码。
我假设每个字节码都被翻译成类似 ADD 或 SUB 之类的汇编器等价物。如果这是真的,那么 JIT 的最终结果和我的解释器应该是相同的汇编指令,此时我不明白为什么我需要我的 /usr/bin/java
解释器。
如有错误请指正
Java 字节码是一种相当高级的语言,与汇编指令的关系远非一对一。以下是我想到的一些事情:
- 垃圾收集 - 这是 JVM 的保证,在谈论本机编写的程序时通常不会考虑。
- 类 - 字节码仍然有 classes 和 class 层次结构(包括多态、虚方法调用等)
- 类型安全 - 尽管存在类型安全的汇编语言,但字节码类型系统远比任何普通汇编语言复杂。
- 数组索引检查 - 每个数组访问都需要(直接或间接)受越界检查的约束。 VM 必须处理的高级功能。
- 空指针检查 - 许多字节码指令可以隐式抛出很好的异常,例如
NullPointerException
。 "native counterpart" 是静默失败或段错误。
- 异常处理 - 异常处理通常对性能有影响。当然,C++ 等原生语言确实支持异常,但许多 C++ 项目出于性能考虑避免使用它们。
我知道javac
将*.java
个文件编译成*.class
个文件,这些文件的内容叫做字节码。
我假设每个字节码都被翻译成类似 ADD 或 SUB 之类的汇编器等价物。如果这是真的,那么 JIT 的最终结果和我的解释器应该是相同的汇编指令,此时我不明白为什么我需要我的 /usr/bin/java
解释器。
如有错误请指正
Java 字节码是一种相当高级的语言,与汇编指令的关系远非一对一。以下是我想到的一些事情:
- 垃圾收集 - 这是 JVM 的保证,在谈论本机编写的程序时通常不会考虑。
- 类 - 字节码仍然有 classes 和 class 层次结构(包括多态、虚方法调用等)
- 类型安全 - 尽管存在类型安全的汇编语言,但字节码类型系统远比任何普通汇编语言复杂。
- 数组索引检查 - 每个数组访问都需要(直接或间接)受越界检查的约束。 VM 必须处理的高级功能。
- 空指针检查 - 许多字节码指令可以隐式抛出很好的异常,例如
NullPointerException
。 "native counterpart" 是静默失败或段错误。 - 异常处理 - 异常处理通常对性能有影响。当然,C++ 等原生语言确实支持异常,但许多 C++ 项目出于性能考虑避免使用它们。