Системы времени выполнения и виртуальные машины
Системы времени выполнения и виртуальные машины обеспечивают среду исполнения для программ, интерпретируя или компилируя промежуточный код и управляя службами, необходимыми для работающей программы.
Definition
Система времени выполнения — это программная среда, которая поддерживает выполнение программы за пределами её собственного кода, а виртуальная машина — это абстрактный механизм выполнения, который интерпретирует или компилирует портативный набор инструкций, обеспечивая переносимость и службы времени выполнения.
Scope
Эта тема охватывает уровень между скомпилированным кодом и аппаратным обеспечением: интерпретаторы байт-кода и абстрактные машины, JIT-компиляцию (just-in-time), динамическую диспетчеризацию и поиск методов, соглашения о вызовах и управление стеком, а также службы времени выполнения, такие как обработка исключений и рефлексия. В ней рассматривается проектирование портативных виртуальных машин и методы, повышающие эффективность управляемых языков.
Core questions
- Как виртуальные машины обеспечивают переносимость между аппаратными платформами?
- Как JIT-компиляция сочетает интерпретацию и нативный код?
- Как обеспечивается эффективность динамической диспетчеризации и поиска методов?
- Какие службы времени выполнения должны поддерживать управляемый язык?
Key theories
- Архитектура портативной виртуальной машины
- Спецификация виртуальной машины Java определяет портативный, проверяемый байт-код и модель выполнения, демонстрируя, как виртуальная машина отделяет язык от конкретного аппаратного обеспечения.
- JIT-компиляция (just-in-time)
- Айкок рассматривает методы, с помощью которых среды выполнения компилируют код в нативный формат во время выполнения, балансируя между быстрым запуском интерпретации и пропускной способностью скомпилированного кода с использованием информации времени выполнения.
- Встроенное кэширование для динамической диспетчеризации
- Реализация Smalltalk Деуча и Шиффмана представила встроенное кэширование и динамическую трансляцию — ключевые методы для ускорения поиска методов в языках с динамической диспетчеризацией.
Clinical relevance
Виртуальные машины и управляемые среды выполнения лежат в основе широко используемых платформ для Java, .NET, JavaScript и Python, обеспечивая переносимость, безопасность и адаптивную оптимизацию. JIT-компиляция и встроенное кэширование объясняют, почему высокоуровневые динамические языки могут достигать конкурентоспособной производительности.
History
Абстрактные машины восходят к ранним портативным системам и Smalltalk, чья реализация 1984 года впервые применила динамическую трансляцию и встроенные кэши. Виртуальная машина Java популяризировала портативный байт-код в середине 1990-х годов, а адаптивные JIT-компиляторы, такие как HotSpot, а затем и движки JavaScript, привнесли агрессивную оптимизацию времени выполнения в основные управляемые языки.
Debates
- Интерпретация против JIT-компиляции
- Разработчики сред выполнения взвешивают простые интерпретаторы с быстрым запуском и низким потреблением памяти против JIT-компиляторов, которые достигают более высокой пиковой производительности ценой времени разогрева и сложности реализации, часто объединяя их в многоуровневых системах.
Key figures
- Peter Deutsch
- John Aycock
- James Gosling
- Gilad Bracha
Related topics
Seminal works
- lindholm2014
- aycock2003
- deutsch1984
Frequently asked questions
- Что такое виртуальная машина в данном контексте?
- Здесь виртуальная машина — это программный механизм выполнения, который запускает портативный набор инструкций (например, байт-код), абстрагируясь от базового аппаратного обеспечения и предоставляя службы времени выполнения, а не эмулируя целый компьютер.
- Как JIT-компиляция помогает повысить производительность?
- JIT-компилятор преобразует часто выполняемые части программы в нативный код во время выполнения, используя информацию профилирования, которой нет у компилятора, работающего заранее, поэтому «горячий» код работает почти с нативной скоростью.