It’s used to convert a running function’s interpreter frame into a JIT’d frame – in the middle of that method.[On-Stack-Replacement (OSR) compilation was first introduced in the famous hotspot server paper, to the best of my knowledge.]
A simple example copied from the same post:
public static void main(String args[]) { S1; i=0; loop: if(P) goto done S3; A[i++]; goto loop; // <<--- here="" osr="" span=""> done: S2; }--->
OSR-compiled function:
void OSR_main() { A=value on entry from interpreter; i=value on entry from interpreter; goto loop; loop: if(P) goto done S3; A[i++]; goto loop; done: ...never reached... }
after OSR_main is compiled, the execution will transfer from goto loop in the interpreter to the OSR_main.
But I am not quiet clear about why ``done'' part in OSR_main is never reached?
沒有留言:
張貼留言