我对字节码感到困惑。
假设我的代码是
class Simple{
public static void main(String args[]){
system.out.print("hello Java!");
}
让它在java编译器中编译然后它是 Simple.class
和
int main(){
print("hello Java!");
}
编译后genarate sample.exe 什么是更快 sample.exe或sample.class
答案 0 :(得分:3)
字节码就像JVM的指令集。无论您编写什么代码,Java编译器都会将其转换为字节代码,以便于执行。它类似于使用翻译器,以解释器可以理解的方式传达您的代码。因此,无论您编写什么代码,都会转换为标准形式的操作码和操作数(如果有的话)。
可以在Wikipedia page上找到更多信息。
答案 1 :(得分:3)
这实际上取决于各个解决方案的实现质量 - 一个好的字节码引擎很可能会击败写得不好的编译器,但是一个执行得很糟糕的字节码引擎肯定比高质量的慢本机编译器。
一个好的优化本机编译器通常会击败产生字节码的编译器,但是有一些像样的即时编译器在字节码上做得非常好 - 具有能够理解什么的额外优势代码的“热”和“冷”路径是通过分析信息,在C或C ++编译器中至少需要一个额外的步骤 - 运行一些代表性的示例代码来收集信息,然后将其反馈给编译器“简介引导优化“。
如果字节码实现只是一个字节码解释器(不是“即时编译器”),那么可以期望从本机编译的代码片段中看到更好的性能。但现代Java“字节码解释器”几乎总是内置一个JIT编译器。