【发布时间】:2017-08-20 08:20:36
【问题描述】:
例如,一个方法中有10000次的循环。当它运行1000次时,backedge_counter触发JIT编译。解释器继续执行。当它循环 4000 次时,JIT 编译完成。
我的问题是,remainder 6000次是如何被解释器执行的,还是执行本机代码?或者直到下次调用此方法才执行本机代码? 下次调用这个方法会发生什么?
【问题讨论】:
-
为什么不能本地执行?这不是 JIT 编译的重点吗?
-
+1 这是一个有趣、重要的问题,恕我直言,不值得反对。 Java HotSpot 编译器是否能够将当前运行的方法调用从解释代码更改为编译代码?问题的措辞并不完美,因为 JIT 和 HotSpot 是微妙不同的方法,但文本明确表示 HotSpot 的意思。
-
@RalfKleberhoff 如果它不能改变一种方法,那么它到底有什么意义呢?也许它让当前的调用完成,但肯定不是下一个 5999 次。这个问题很愚蠢。
-
当然,HotSpot 能够在此方法未执行时将方法从解释转换为本地。这是理所当然的。在方法执行过程中也可以这样做吗?
-
@RalfKleberhoff 这不是被问到的问题。问题是关于剩余的 6,000 次调用。