Java 有JIT和没有JIT的JVM之间的区别

Java 有JIT和没有JIT的JVM之间的区别,java,jvm,jit,Java,Jvm,Jit,我指的是Oracle的以下文档: 在“1.JRockit JVM运行JIT编译”一节中提到,对于没有JIT的JVM,JIT JVM有更多的启动时间和更少的执行时间,反之亦然 我很困惑,因为据我所知,JIT是根据程序的执行来编译代码的,因此编译速度很快。代码将得到优化,因此执行时间也将很快 他们想用这一点说明什么?我没有正确地理解它。基本上他们所说的JIT编译需要时间。HotSpot实际上编译了两次代码—首先未优化,然后对常用部分进行优化 因此,当您的程序启动时,根据VM类型,它首先以解释模式运

我指的是Oracle的以下文档:

在“1.JRockit JVM运行JIT编译”一节中提到,对于没有JIT的JVM,JIT JVM有更多的启动时间和更少的执行时间,反之亦然

我很困惑,因为据我所知,JIT是根据程序的执行来编译代码的,因此编译速度很快。代码将得到优化,因此执行时间也将很快


他们想用这一点说明什么?我没有正确地理解它。

基本上他们所说的JIT编译需要时间。HotSpot实际上编译了两次代码—首先未优化,然后对常用部分进行优化

因此,当您的程序启动时,根据VM类型,它首先以解释模式运行字节码,或者等待字节码编译并切换到编译版本,然后如果代码经常使用,则通过更多优化再次编译。这一切都需要资源和时间,因此启动速度较慢,但当程序预热时,运行速度很快


在解释模式下,如果没有JIT,VM只会立即开始解释代码,因此启动速度更快,但性能更差。

基本上就是他们所说的JIT编译需要时间。HotSpot实际上编译了两次代码—首先未优化,然后对常用部分进行优化

因此,当您的程序启动时,根据VM类型,它首先以解释模式运行字节码,或者等待字节码编译并切换到编译版本,然后如果代码经常使用,则通过更多优化再次编译。这一切都需要资源和时间,因此启动速度较慢,但当程序预热时,运行速度很快


在解释模式下,如果没有JIT,VM只会立即开始解释代码,因此启动速度更快,但性能更差。

“HotSpot实际上会编译代码两次”=>或更多-当JVM收集有关其运行方式的更多信息时,可以多次编译方法。在某些情况下,它也可以被反编译。那么编译后的版本是机器可执行的吗?如果是这样的话,它能在没有jvm的情况下被输出为可执行文件吗?“HotSpot实际上会编译代码两次”=>或更多次-当jvm收集有关如何运行的更多信息时,一个方法可以被编译多次。在某些情况下,它也可以被反编译。那么编译后的版本是机器可执行的吗?如果是这样,它是否可以输出为没有jvm的可执行文件?