为什么不摆脱JVM?

时间:2010-08-27 18:52:59

标签: java compiler-construction jvm

JIT编译器已存在一段时间了。偶尔我会想到,“嘿,为什么不直接将Java源文件编译成机器代码呢?”

与编译库一起,我们可以摆脱繁琐的JVM。

我能想到的唯一障碍是垃圾收集器。你的想法怎么样?

PS:哦,你说便携性? WTH是那个?另外,我首先被迫安装JVM。

5 个答案:

答案 0 :(得分:20)

好吧,我的朋友使用Ubuntu,我使用Windows XP,而我的另一个朋友使用OSX。

当我向他们发送我编译的jar时,他们都可以运行该文件而不做任何更改。

这就是为什么你不应该摆脱JVM。

答案 1 :(得分:7)

vm可以根据仅在运行时可用的信息执行复杂的优化。静态编译时优化根本无法竞争。 Java很快,因为它在vm上运行。

看这个

http://www.infoq.com/presentations/Towards-a-Universal-VM

答案 2 :(得分:4)

在某些平台上(主要是嵌入式平台),就像你说的那样(或者机器本身就是java)。您也可以下载执行您所建议的编译器,但我想您在此过程中会丢失大量Java API。

回到你的问题,主要原因是设计语言和规范的人想拥有它。干净利落。它提供了可移植性,考虑到制作可移植代码的“硬”部分应该只需要在每个环境中完成一次(另一个海报讲述了3个不同的OS运行JVM)而不是每个项目的每个环境一次。你有没有试过制作大多数可移植的C ++代码而没有像Qt这样的框架或像Boost这样的软件包?它变得非常困难,即使这样,你仍然必须为每个架构重新编译。

答案 3 :(得分:2)

除了可移植性之外,另一个需要考虑的问题是动态类加载,这很难通过机器代码来处理。 servlet容器如何在这种情况下工作?也许它适用于嵌入式Java,但我不认为是J2EE。

.class表单只是一个在执行前转换为机器代码的中间二进制文件吗?或者你会直接从Java源代码编译成机器代码吗?

答案 4 :(得分:1)

字节码生成对于代码的平台独立性是必要的。

JVM(JVM对所有平台都不同)读取这些字节码并将其转换为机器代码,具体取决于其运行的平台。这使得Java编译代码平台独立。 JVM还进行了优化,使Java变得更快。