【发布时间】:2013-11-28 15:40:18
【问题描述】:
我知道 java 会生成字节码,但 JVM 每次都需要在运行时解释它。
是否存在生成与机器无关的代码的编译器,比如 C 语言。 然后在目标机器上,这会永久转换为其本地机器代码一次,而不是每次运行都转换?
这是否解决了为什么许多开发人员为 windows 开发而不是 linux 的原因?
【问题讨论】:
-
你实际上不想要那个。 Java 可以做到这一点,但这不是一个好主意。 JVM 不仅可以为它所在的系统编译代码,还可以为它运行的情况编译代码。今天字节码 JIT 的方式不一定与明天 JIT 的方式相同。正因为如此(预热后)java 有时可以胜过 C++
-
拥有一个独立于机器的“前端”,然后让“后端”进行从基于堆栈或基于四边形的表示法到目标机器指令的转换是相当普遍的.与机器无关的优化器可能会卡在两者之间。
-
@RichardTingle - JITCed Java 比静态编译代码运行得更快的能力正是因为它不是静态编译的。与机器独立无关。 (事实上,JITC 是按照我上面描述的方式构建的。)
-
@HotLicks 实际上,关键是编译一次然后一遍又一遍地使用它实际上并不像人们想象的那么棒(尽管听起来会如此)。机器独立性只是一个额外的好处
-
@RichardTingle - 可能是因为 Java 是当前唯一的架构。许多开发人员希望能够发布针对不同架构的编译应用程序,但除了 Java 之外没有其他方案可以做到这一点。曾经是旧的 P 代码方案,但在 PC 的早期就被 Borland 埋没了。
标签: java compiler-construction