当我们拥有JVM时,为什么还需要Java编译器?

时间:2018-01-06 19:48:58

标签: java jvm javac

在我阅读JVM简介时,我想出了一个好奇心的问题。

当我们拥有通用的,与平台无关的Java虚拟机时,为什么还需要Java编译器?我的意思是,考虑Python,它有一个交互式shell,逐行读取源代码,然后执行它而不必事先编译源代码,为什么JVM不能设计能够像Python那样直接读取.java文件,然后执行它?

如果不是这样,有人可以解释一下Java编译器的意义吗?

2 个答案:

答案 0 :(得分:4)

Java确实可以在任何地方创建源代码(就像通常使用JavaScript一样)。但作为设计选择,Gosling et。人。决定发送字节码,它是由Java编译器从源代码创建的。这样做有几个客观原因:

  • 字节码小于源代码。
  • 字节码比源代码更难逆向工程(虽然只是略微)。
  • 字节码比源代码更难修改。
  • 使用字节码意味着JVM不必拥有Java编译器(减少占用空间,这在〜1995年比现在更重要)
  • 编译需要非常重要的时间(以及非平凡的内存使用)。编译为字节码可以保留Run Everywhere (tm)而不会对启动产生影响。

但是,这只是他们采取的一项设计决定。微软对.Net采取了同样的决定。

答案 1 :(得分:0)

java编译器将java源转换为字节码。

JVM只执行字节码。不同操作系统上的JVM可以运行相同的字节码。

Scala等其他语言也可以编译为字节码并在JVM上运行。

编译提高了执行效率和安全性。