我明白on-stack replacement(OSR)通常如何工作,但我不明白OSR编译的方法是否曾经有用,一旦方法离开触发编译的初始调用 - JITed代码是否可用于后续迭代?后续调用可以使用OSR编译的方法吗?
看起来好像是这样,一旦解释器进入相同的字节码索引,旧OSR启动它就可以再次进入OSR编译方法。
我问的主要是因为我看到Hotspot立即OSR编译我的方法两次(对于不同的BCI),但甚至没有执行正常的C2非OSR编译,直到它已经运行几分钟的时间(尽管有一百万次呼叫或更多的方法)。所以我想知道是否同时使用OSR C2方法(也有非OSR C1方法)?
是的,最后我没有重现它 - 后来运行的主要是显示热启动方法在启动后一秒钟左右就可以编译正常的非OSR C2(级别4),所以我不确定是什么起床了。也许这是LogCompilation输出中的一个小故障(例如,由PrintAssembly并发地写入?),因为_timing_似乎表明它正在运行OK。 – BeeOnRope
你的意思是“在相同的字节码**索引**上面为...生成”吗? – BeeOnRope
@BeeOnRope是的,谢谢你的纠正。 – apangin