字节码是否比任何可执行代码(.exe等)快?

时间:2016-10-19 07:05:19

标签: java

我对字节码感到困惑。

假设我的代码是

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

2 个答案:

答案 0 :(得分:3)

字节码就像JVM的指令集。无论您编写什么代码,Java编译器都会将其转换为字节代码,以便于执行。它类似于使用翻译器,以解释器可以理解的方式传达您的代码。因此,无论您编写什么代码,都会转换为标准形式的操作码和操作数(如果有的话)。

可以在Wikipedia page上找到更多信息。

答案 1 :(得分:3)

这实际上取决于各个解决方案的实现质量 - 一个好的字节码引擎很可能会击败写得不好的编译器,但是一个执行得很糟糕的字节码引擎肯定比高质量的慢本机编译器。

一个好的优化本机编译器通常会击败产生字节码的编译器,但是有一些像样的即时编译器在字节码上做得非常好 - 具有能够理解什么的额外优势代码的“热”和“冷”路径是通过分析信息,在C或C ++编译器中至少需要一个额外的步骤 - 运行一些代表性的示例代码来收集信息,然后将其反馈给编译器“简介引导优化“。

如果字节码实现只是一个字节码解释器(不是“即时编译器”),那么可以期望从本机编译的代码片段中看到更好的性能。但现代Java“字节码解释器”几乎总是内置一个JIT编译器。