我了解到 Just-in-time compilation (JIT),它有两种实现方式,即解释器和JIT,在运行时都会解释字节码。为什么不预先将所有的字节码解释成机器码,然后开始运行进程,就不再需要解释器呢?
简单来说,因为要将所有内容预编译成机器码需要一定时间,用户不希望等待应用程序启动。请记住,预编译需要进行许多优化处理,这需要时间。
JVM 服务器版本更加积极地提前预编译和优化代码,因为服务器端的代码往往在进程关闭之前会被执行多次且持续时间更长。
然而,对于 .Net 来说,有一种名为 NGen 的应用程序可以使预编译成为一次性操作,之后就不再需要了。您只需运行此操作一次即可。
并非所有的虚拟机都包含解释器。例如,Chrome 和 CLR (.Net) 在运行之前总是将代码编译成机器码。但是,它们具有多个级别的优化以减少启动时间。