La optimización OSR se activará cuando un bucle se ejecute suficientes veces. El marcado y la activación de una tarea de optimización ocurrirán en el controlador JumpLoop . Dos preguntas sobre OSR en V8:
A diferencia de la optimización de funciones ordinarias, la activación de un trabajo de optimización OSR no se realizará en el siguiente turno después de marcar. Puede pasar mucho tiempo entre marcar y activar un trabajo de opción, ¿por qué? ¿Cuál es la condición?
¿Cómo continuar ejecutando la función interrumpida en código optimizado?
Re 1. Por varias razones, generalmente es preferible la optimización sin OSR (en resumen, el código generado será mejor). Hacer OSR solo vale la pena cuando la función en cuestión pasa mucho tiempo en un bucle. Entonces, el propósito de esperar un poco es ver si el ciclo terminará lo suficientemente pronto.
Re 2. Esa es la "magia" del reemplazo en la pila: el contenido del marco de la pila se convierte al formato que necesita el código optimizado para esa función, y luego se toma un punto de entrada especial en el código optimizado que puede reanudar ejecución desde exactamente el punto donde fue interrumpida. (Esa es una de las razones por las que es preferible el código que no es OSR: no necesita este punto de entrada especial).