2011-06-14 115 views
3

想知道是否有人向我解释JVM,CLR和其他“虚拟机”如何知道何时“启动”?JVM和CLR如何知道什么时候启动

通过这个我的意思是,你双击你的可执行文件,你的机器开始执行代码,但在某些时候 - 显然 - 代码需要通知机器,这段代码需要其他进程来运行,需要通过操作码。那么这是如何发生的呢?

回答

4

每个可执行文件首先运行非托管代码,该代码通过控制例如,到CLR(从mscoree.dll调用_CorExeMain)。然后,CLR(非托管事物)读取/编译/执行程序集内的代码(并执行其他操作)。

-1

这有点依赖操作系统。在linux中,你不能仅仅通过说java程序的名字来运行Java程序,你通常会使用java。我没有运行任何CLR二进制文件,但我认为它是一样的。在Windows(以及类似Jar文件)中,windows有一个处理程序,它说“当用户打开一个以.jar结尾的文件,运行java”和类似的.net二进制文件。

+0

*“我还没有运行任何CLR二进制文件,但我认为它是一样的。”*关于假设的流行短语又是什么? :)在这方面,CLR并没有像JVM那样工作。 – MattDavey 2011-06-14 08:07:05

+0

它在Linux上运行,只有在Windows上它们的工作方式不同。 – Programmdude 2012-12-07 06:58:05

1

在.net程序中有一种启动CLR的可执行程序中的引导加载程序。这个引导程序是用本地机器代码编写的,所以它可以直接执行。之后是托管代码和其他应用程序资源,然后由CLR执行.net程序。

看看JVM,它可能会更清晰。您有几个传递给java.exe的.class文件。这些.class文件包含java字节码,不能通过双击直接执行。 .jar文件也只是一个带有.class和其他文件的压缩文件。文件扩展名.jar映射到java.exe,双击它时,java.exe将以.jar文件作为参数执行 - 双击.doc文件时Word将启动。

相关问题