JVM和CLR如何知道何时启动?

3

请问是否有人能够友好地解释一下JVM、CLR和其他“虚拟机”是如何知道何时“启动”的呢?

我的意思是,当您双击可执行文件时,您的计算机开始执行代码,但显然在某个时刻,代码需要通知计算机,该代码需要某些其他进程才能运行并需要传递操作码。那么这是如何实现的呢?

3个回答

5
每个可执行文件首先运行非托管代码,将控制权传递给CLR(调用来自mscoree.dll的_CorExeMain)。然后CLR(非托管部分)读取/编译/执行您程序集中的代码(以及执行其他操作)。

1
在 .net 程序中,可执行文件中有一种引导程序,用于启动 CLR。该引导程序是用本机机器码编写的,因此可以直接执行。它后面跟着托管代码和其他应用程序资源,然后由 CLR 执行 .net 程序。
看一下 JVM,可能会更清楚。您有几个 .class 文件需要传递给 java.exe。这些 .class 文件包含 Java 字节码,不能通过双击直接执行。同时,.jar 文件只是一个包含 .class 和其他文件的 zip 文件。文件扩展名 .jar 映射到 java.exe,当您双击它时,java.exe 以 .jar 文件作为参数被执行,与您双击 .doc Word 文件并启动 Word 的过程相同。

-1
这在某种程度上取决于操作系统。在Linux中,你不能仅仅通过输入Java程序的名称来运行它,通常需要使用java命令。我没有运行过任何CLR二进制文件,但我认为情况是一样的。在Windows中(以及像Jar文件之类的东西),Windows有一个处理程序,会说“当用户打开以.jar结尾的文件时,运行Java”,对于.net二进制文件也是类似的。

我还没有运行过任何CLR二进制文件,但我认为它应该是相同的。关于假设的那个流行的短语又是什么来着? :) 在这方面,CLR和JVM的工作方式不同。 - MattDavey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接