Оба они в значительной степени делают то же самое. Определите, что метод горячий и скомпилируйте его вместо интерпретации. С помощью OSR вы просто переходите к скомпилированной версии сразу после ее компиляции, в отличие от JIT, где скомпилированный код вызывается при вызове метода во второй раз.
Кроме этого, существуют ли другие отличия?