为什么Java语言需要字节码?为什么用这种方式设计java?

时间:2011-11-16 15:04:07

标签: java bytecode

正如我所知道的java开发人员,需要让他们的.java文件成为.class,而.class需要JVM转换为本机代码才能执行。为什么Java设计会这样?为什么不只是使用解释器作为脚本语言来解释.java文件?或者为什么不将它转换为像C这样的可执行文件?为什么需要转换为字节码? java语言背后的设计理念是什么?

5 个答案:

答案 0 :(得分:10)

  

同时为了速度和便携性。

我要说的所有内容都是根据具体情况进行调整和审核,但粗略地说:

  • 如果您只是用解释器来解释java文件 会有便携性而不是速度

  • 如果必须编译给定处理器的代码 架构你会有速度而不是便携性

  • 使用字节码,您可以编译公共代码(到字节码) 将执行它的机器(JVM)它是一个之间的妥协 速度和便携性

答案 1 :(得分:3)

  

为什么以这种方式设计Java?

编写一次,随处运行 - 可移植性。

  

为什么不只是使用解释器作为脚本语言来解释.java文件?

性能。字节码可以通过一些积极的优化编译为本机代码,不适用于普通编译器。

  

或者为什么不将它转换为像C这样的可执行文件?

因为不同的平台需要不同的可执行二进制文件。 Java字节码(再次)是可移植的。

答案 2 :(得分:2)

  

为什么不只是使用解释器作为脚本语言   解释器.java文件?或者为什么不将它转换为可执行文件   喜欢C?为什么需要转换为字节码?

我认为其意图是

1)编制时间安全
2)写一次,随处运行。

如果转换为像C这样的可执行文件,则会丢失#2。从某种意义上说,JVM是一个解释器,所以解释了Java 字节码,同时编译了Java代码。

答案 3 :(得分:2)

  

为什么不只是使用解释器作为脚本语言来解释.java文件?

Suit yourself

  

或者为什么不将它转换为像C这样的可执行文件?

因为这不会跨平台工作。 Portable Executable(在Windows上使用)不会在Linux或iOS上运行,至少不会没有技巧。

通过考虑套接字和文件访问,可以进行简单的比较。如何在没有JVM的情况下使用一个可执行文件在不同平台上执行此操作?

答案 4 :(得分:0)

  1. 解释(和编译)字节代码比解释原始java更快。

  2. 字节代码是可移植的。您可以在Windows上编译,并在Mac或Unix上运行字节代码。