我明白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