我正在通过以下方式学习源代码到机器代码的转换.NET
and JRE
构架。首先,我做了一些研究,比较了这两个过程并创建了这个图。我需要一些帮助来批评它的正确性,更重要的是添加我错过的任何严重的事情,以更好地理解编译路径。
.NET 和 Java 都编译为字节码,这是一种包含虚拟机指令的中间语言。它不是机器代码,因为它不能直接在物理机器上运行。相反(至少在今天;Java 在这方面有更黑暗的历史)发生的是,在运行时运行一个即时编译器,它将 VM 指令转换为本机代码,然后直接运行。与仅解释它相比,这具有重大的性能优势。
他们在这方面略有不同。 Oracle 的 Java 实现(Hotspot)巧妙地结合了解释、测量和 JIT 编译,仅编译频繁使用的部分,并解释其他部分。这是为了减少 JIT 编译器的初始影响(否则需要预先运行,从而延长进程启动时间),同时仍然在需要时提供良好的性能。另一方面,.NET 总是 JIT 编译所有使用的代码(但不编译未使用的代码)。
编辑(2019):到目前为止,.NET 还具有分层编译功能,根据运行次数较多的代码,该代码将得到进一步优化。
至于你在评论中提到的一个问题:是的,CLR和JVMare这些程序运行的平台。虚拟机也是机器,只是硬件较少。它们都与相应的框架、.NET 的基类库和 Java 的 Java 类库紧密集成。这些是框架。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)