为什么C#和Java会在编译时编译,而不是在第一次运行/安装时编译所有内容?

为什么C#和Java会在编译时编译,而不是在第一次运行/安装时编译所有内容?,java,c#,Java,C#,在应用程序的某些安装过程中,您似乎可以将字节码编译为本机代码,而不会出现跨平台问题 安装并不一定意味着GUI安装。这可以是在第一次运行可执行文件时发生的静默进程。(带或不带图形过程栏) 这(我认为)对这些语言的开发人员来说会容易得多,并且会产生更快的可执行文件,而不会失去对当前机器的适应性。类似的事情在幕后发生(至少在.NET中是这样)。可以在本机映像缓存中缓存本机映像,这样就不必在该计算机上再次编译代码 Ngen.exe创建本机映像(包含编译的处理器特定机器代码的文件),并将其安装到本地计算机

在应用程序的某些安装过程中,您似乎可以将字节码编译为本机代码,而不会出现跨平台问题

安装并不一定意味着GUI安装。这可以是在第一次运行可执行文件时发生的静默进程。(带或不带图形过程栏)

这(我认为)对这些语言的开发人员来说会容易得多,并且会产生更快的可执行文件,而不会失去对当前机器的适应性。

类似的事情在幕后发生(至少在.NET中是这样)。可以在本机映像缓存中缓存本机映像,这样就不必在该计算机上再次编译代码

Ngen.exe创建本机映像(包含编译的处理器特定机器代码的文件),并将其安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机映像,而不是使用即时(JIT)编译器编译原始程序集


JIT编译使代码在运行时比使用解释器快得多,但初始成本可能会过高,这取决于所做的工作。

阅读此QA:好吧,这确实是一个非常有趣的主题,但我不认为这是StackOverflow的一个好问题。。。不是以这种形式,我不是在问怎么做。我想问的是,为什么设计人员首先会选择这一点,而这似乎要困难得多。你问“为什么C#和Java会在第一次运行/安装时编译所有代码,而不是在第一次运行/安装时编译所有代码?”我的回答是“这个问题没有意义,因为代码在第一次运行时只编译一次”.我很肯定,即使在第二轮中,JIT仍在发挥作用。