Sistemas de tiempo de ejecución y máquinas virtuales
Los sistemas de tiempo de ejecución y las máquinas virtuales proporcionan el entorno de ejecución para los programas, interpretando o compilando código intermedio y gestionando los servicios que un programa en ejecución necesita.
Definition
Un sistema de tiempo de ejecución es el entorno de software que soporta la ejecución de un programa más allá de su propio código, y una máquina virtual es un motor de ejecución abstracto que interpreta o compila un conjunto de instrucciones portátil, proporcionando portabilidad y servicios de tiempo de ejecución.
Scope
Este tema cubre la capa entre el código compilado y el hardware: intérpretes de bytecode y máquinas abstractas, compilación justo a tiempo (JIT), despacho dinámico y búsqueda de métodos, convenciones de llamada y gestión de pila, y servicios de tiempo de ejecución como el manejo de excepciones y la reflexión. Aborda el diseño de máquinas virtuales portátiles y las técnicas que hacen eficientes los lenguajes gestionados.
Core questions
- ¿Cómo proporcionan las máquinas virtuales portabilidad entre diferentes tipos de hardware?
- ¿Cómo combina la compilación justo a tiempo la interpretación y el código nativo?
- ¿Cómo se hacen eficientes el despacho dinámico y la búsqueda de métodos?
- ¿Qué servicios de tiempo de ejecución deben soportar un lenguaje gestionado?
Key theories
- Arquitectura de máquina virtual portátil
- La especificación de la Máquina Virtual de Java define un bytecode y un modelo de ejecución portátiles y verificables, demostrando cómo una máquina virtual desacopla un lenguaje de un hardware particular.
- Compilación justo a tiempo
- Aycock examina las técnicas mediante las cuales los entornos de ejecución compilan código a formato nativo durante la ejecución, equilibrando el inicio de la interpretación con el rendimiento del código compilado utilizando información en tiempo de ejecución.
- Almacenamiento en caché en línea para despacho dinámico
- La implementación de Smalltalk de Deutsch y Schiffman introdujo el almacenamiento en caché en línea y la traducción dinámica, técnicas clave para acelerar la búsqueda de métodos en lenguajes con despacho dinámico.
Clinical relevance
Las máquinas virtuales y los entornos de ejecución gestionados impulsan plataformas ampliamente utilizadas para Java, .NET, JavaScript y Python, proporcionando portabilidad, seguridad y optimización adaptativa. La compilación JIT y el almacenamiento en caché en línea son las razones por las que los lenguajes de alto nivel y dinámicos pueden lograr un rendimiento competitivo.
History
Las máquinas abstractas se remontan a los primeros sistemas portátiles y a Smalltalk, cuya implementación de 1984 fue pionera en la traducción dinámica y las cachés en línea. La Máquina Virtual de Java popularizó el bytecode portátil a mediados de la década de 1990, y los compiladores JIT adaptativos como HotSpot y, posteriormente, los motores de JavaScript llevaron la optimización agresiva en tiempo de ejecución a los lenguajes gestionados convencionales.
Debates
- Interpretación versus compilación justo a tiempo
- Los diseñadores de entornos de ejecución sopesan los intérpretes simples con inicio rápido y bajo uso de memoria frente a los compiladores JIT que logran un mayor rendimiento máximo a costa del tiempo de calentamiento y la complejidad de la implementación, a menudo combinando ambos en sistemas escalonados.
Key figures
- Peter Deutsch
- John Aycock
- James Gosling
- Gilad Bracha
Related topics
Seminal works
- lindholm2014
- aycock2003
- deutsch1984
Frequently asked questions
- ¿Qué es una máquina virtual en este contexto?
- Aquí, una máquina virtual es un motor de ejecución de software que ejecuta un conjunto de instrucciones portátil (como bytecode), abstrae el hardware subyacente y proporciona servicios en tiempo de ejecución en lugar de emular una computadora completa.
- ¿Cómo ayuda la compilación justo a tiempo al rendimiento?
- Un compilador JIT traduce partes del programa que se ejecutan con frecuencia a código nativo en tiempo de ejecución, utilizando información de perfilado de la que carece un compilador anticipado, de modo que el código 'caliente' se ejecuta a una velocidad casi nativa.