为什么公共语言运行时是虚拟机?

Why is the Common Language Runtime a virtual machine?

在研究 C# 时,我在 Wikipedia 上遇到了以下语句:

The Common Language Runtime (CLR), the virtual machine component of Microsoft's .NET framework, manages the execution of .NET programs.

这可能是一个新手问题,但据我所知,虚拟机只是 OS 的仿真。为什么 CLR 被认为是虚拟机?

你对此感到有点困惑是正确的。术语虚拟机可以有不同的含义,有时用于指代硬件设置的模拟。就像你说的,他们通常习惯于 运行 一台机器上的多个操作系统。

然而,令人困惑的是,术语虚拟机还指负责在 运行 时将字节代码(人工的、更便携的机器指令)翻译成真正的本机代码的软件。此外,它们还负责管理程序的 运行 时间(例如,通过自动释放回内存,无需程序员参与,这称为垃圾收集)。

通用语言运行时间是后一种意义上的虚拟机。

CLR 类似于 JVM(Java 虚拟机)。 JVM 是用于 运行 Java 程序的虚拟机。 .Net 程序集(Dll 和 Exes)不直接由 OS 执行,而是由称为 CLR 的中间层执行,它将 .NET 程序集转换为本机可执行代码。这种体系结构的优点是 .NET 程序不需要为不同的 OS 重新编译(Linux,Unix),如果在那个 OS 上安装了虚拟机,那么.NET 程序应该 运行 像它一样(例如构建在 Windows 上)。 .NET 的另一个虚拟机是 Mono。这是单声道:http://www.mono-project.com/.