在编译过程方面,Java Runtime Environment如何与.NET框架进行比较?

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

在此处输入图像描述

.NET和Java都编译为字节码,这是一种包含虚拟机指令的中间语言。 它不是机器代码,因为它无法直接在物理机器上运行。 相反的是(至少今天; Java在这方面有一个更深的历史)是在运行时运行一个即时编译器,它将VM指令转换为本机代码,然后直接运行。 只有解释它才能获得重要的性能益处。

他们在这方面有所不同。 Su ^ H ^ H Oracle的Java实现使用了解释,测量和JIT的巧妙组合,只编译了大量使用和解释的部分。 这是为了减少JIT编译器的初始影响(否则需要预先运行,延长进程启动时间),同时仍然可以在需要时提供良好的性能。 另一方面,.NET总是JIT编译所有使用的代码(虽然未编译未使用的代码)。

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