JVM和CLR如何知道何时启动

本文关键字:何时 启动 何知道 CLR JVM | 更新日期: 2023-09-27 17:59:09

只是想知道是否有人愿意向我解释JVM、CLR和其他"虚拟机"是如何知道何时"启动"的?

我的意思是,双击你的可执行文件,你的机器就开始执行代码,但在某个时候——很明显——代码需要通知机器,这个代码需要一些其他进程才能运行,并且需要传入操作代码。那么这是怎么发生的呢?

JVM和CLR如何知道何时启动

每个可执行文件首先运行非托管代码,该代码将控制传递给CLR(从mscoree.dll调用_CorExeMain)。然后CLR(非托管的东西)读取/编译/执行程序集中的代码(并执行其他事情)。

在.net程序中,可执行文件中有一种启动CLR的引导程序。这个引导加载程序是用本机代码编写的,因此可以直接执行。后面是托管代码和其他应用程序资源,然后CLR使用这些资源来执行.net程序。

看看JVM,它可能会更清楚。您有几个.class文件正在传递给java.exe。这些.class包含java字节码,无法通过双击直接执行。另外,.jar文件只是一个包含.class和其他文件的zip文件。文件扩展名.jar被映射到java.exe,当您双击它时,java.exe将以.jar文件作为参数执行,这与您双击.doc word文件并启动word的过程相同。

这在某种程度上取决于操作系统。在linux中,你不能只说Java程序的名称就运行Java程序,你通常是这样做的。我还没有运行任何CLR二进制文件,但我认为它是一样的。在Windows(以及像Jar文件这样的文件)中,Windows有一个处理程序,它会说"当用户打开一个以.Jar结尾的文件时,运行java"之类的话,类似于.net二进制文件。