11

我正在学习通过.NETJRE框架将源代码转换为机器代码。首先,我做了一些比较这两个过程的研究并创建了这个图表。我需要一些帮助来批评它的正确性,更重要的是添加我错过的任何严重的事情,以更好地理解编译路径。

在此处输入图像描述

4

1 回答 1

14

.NET 和 Java 都编译为字节码,这是一种包含虚拟机指令的中间语言。它不是机器代码,因为它不能直接在物理机器上运行。取而代之的是(至少在今天;Java 在这方面有更黑暗的历史)是在运行时运行一个即时编译器,它将 VM 指令翻译成本机代码,然后直接运行。与仅解释它相比,这具有主要的性能优势。

他们在这方面略有不同。Oracle 的 Java 实现 (Hotspot) 巧妙地结合了解释、测量和 JIT,仅编译大量使用的部分并在其他方面进行解释。这是为了减少 JIT 编译器的初始影响(需要提前运行,否则会延长进程启动时间),同时在需要时仍然允许良好的性能。另一方面,.NET 总是 JIT 编译所有使用的代码(尽管未编译未使用的代码)。

编辑(2019 年):到目前为止,.NET 还具有分层编译,根据运行的代码量,该代码将得到进一步优化。

至于您在评论中提到的一个问题:是的,CLR 和 JVM运行此类程序的平台。虚拟机也是一台机器,只是更少的硬件。它们都与相应的框架紧密集成,即 .NET 的基类库和 Java 的 Java 类库。这些是框架。

于 2012-06-28T22:10:23.813 回答