Jump to content

Сравнение программного обеспечения для виртуализации приложений

Программное обеспечение для виртуализации приложений относится как к виртуальным машинам приложений , так и к программному обеспечению, отвечающему за их реализацию. Виртуальные машины приложений обычно используются для обеспечения байт-кода переносимости приложения на различных компьютерных архитектурах и операционных системах. Приложение обычно запускается на компьютере с использованием интерпретатора или JIT- компиляции . Часто существует несколько реализаций одной виртуальной машины, каждая из которых охватывает свой набор функций.

Сравнение виртуальных машин

[ редактировать ]
Машины JavaScript не включены. Чтобы найти их, см. Список движков ECMAScript .

В таблице приведены элементы, для которых конструкции виртуальных машин должны быть эффективными, а не список возможностей, присутствующих в любой реализации.

Виртуальная машина Модель машины Управление памятью Безопасность кода Устный переводчик ТОЧНО в срок АОТ Общие библиотеки Общеязыковая объектная модель Динамическая типизация
Среда выполнения Android (ART) зарегистрироваться автоматический Да Да Да Да ? Да Да
Общеязыковая среда выполнения (CLR) куча автоматический или ручной Да Да Да Да Да Да Да
Толкай ( Ад ) зарегистрироваться автоматический Да Да Да Да Да Да Да
DotGNU Portable.NET куча автоматический или ручной Да Да Да Да Да Да Нет
Виртуальная машина Java (JVM) куча автоматический Да Да Да Да Да Да Да [1]
ДжикесРВМ куча автоматический Да Да Да Да ? Да Да
ЛЛВМ зарегистрироваться руководство Нет Да Да Да Да Да Нет
Мононуклеоз куча автоматический или ручной Да Да Да Да Да Да Да
Попугай зарегистрироваться автоматический Нет Да Нет [2] Да Да Да Да
Далвик зарегистрироваться автоматический Да Да Да Нет ? Нет Нет
Скрип куча автоматический Нет Да Да Нет Да Нет Да
ЛУЧ ( Эрланг ) зарегистрироваться автоматический ? Да Да Да Да Да Да
МоарВМ зарегистрироваться автоматический ? Да Да Да Да Да Да

Инструкции виртуальной машины обрабатывают данные в локальных переменных, используя основную модель вычислений , обычно это стековая машина , регистровая машина или машина с произвольным доступом, часто называемая машиной памяти. Использование этих трех методов мотивировано различными компромиссами между виртуальными машинами и физическими машинами, такими как простота интерпретации, компиляции и проверки безопасности.

Управление памятью в этих портативных виртуальных машинах осуществляется на более высоком уровне абстракции, чем в физических машинах. Некоторые виртуальные машины, такие как популярные виртуальные машины Java (JVM), связаны с адресами таким образом, что требуют безопасного автоматического управления памятью, позволяя виртуальной машине отслеживать ссылки на указатели и запрещая машинным инструкциям вручную создавать указатели на память. . Другие виртуальные машины, такие как LLVM, больше похожи на традиционные физические машины, позволяя напрямую использовать указатели и манипулировать ими. Common Intermediate Language (CIL) предлагает гибрид между ними, позволяющий как контролируемое использование памяти (например, JVM, который обеспечивает безопасное автоматическое управление памятью), так и «небезопасный» режим, который позволяет напрямую манипулировать указателями способами, которые могут нарушать тип. границы и разрешение.

Безопасность кода обычно относится к способности портативной виртуальной машины запускать код, предлагая ей только предписанный набор возможностей. Например, виртуальная машина может разрешать коду доступ только к определенному набору функций или данных. Тот же контроль над указателями, который делает возможным автоматическое управление памятью и позволяет виртуальной машине обеспечить типобезопасный доступ к данным, используется для обеспечения того, чтобы фрагмент кода имел доступ только к определенным элементам памяти и не мог обходить саму виртуальную машину. Затем сверху накладываются другие механизмы безопасности, такие как верификаторы кода, верификаторы стека и другие методы.

Интерпретатор позволяет программам , состоящим из виртуальных инструкций, загружаться и запускаться немедленно без потенциально дорогостоящей компиляции в собственные машинные инструкции. Любая виртуальная машина, которую можно запустить, может быть интерпретирована, поэтому обозначение столбца здесь относится к тому, включает ли проект средства для эффективной интерпретации (для общего использования).

Компиляция «точно в срок» (JIT) относится к методу компиляции собственных инструкций в самое позднее время, обычно непосредственно перед запуском программы или во время него. Задача JIT заключается скорее в реализации, чем в проектировании виртуальных машин, однако в современных проектах начали учитываться соображения, повышающие эффективность. Простейшие методы JIT просто компилируются во фрагмент кода, аналогичный автономному компилятору. Однако часто используются более сложные методы, которые специализируют фрагменты скомпилированного кода на параметрах, известных только во время выполнения (см. Адаптивная оптимизация ).

Предварительная компиляция (AOT) относится к более классическому методу использования прекомпилятора для создания набора собственных инструкций, которые не изменяются во время выполнения программы. Поскольку агрессивная компиляция и оптимизация могут занять время, предварительно скомпилированная программа может запускаться быстрее, чем та, которая для выполнения использует только JIT. Реализации JVM уменьшили эти затраты на запуск за счет первоначальной интерпретации, чтобы ускорить время запуска до тех пор, пока JIT не сможет генерировать фрагменты собственного кода.

Общие библиотеки — это средство повторного использования сегментов собственного кода в нескольких запущенных программах. В современных операционных системах это обычно означает использование виртуальной памяти для совместного использования страниц памяти, содержащих общую библиотеку, между различными процессами, которые защищены друг от друга с помощью защиты памяти . Интересно, что агрессивные методы JIT, такие как адаптивная оптимизация, часто создают фрагменты кода, непригодные для совместного использования несколькими процессами или последовательными запусками программы, что требует компромисса между эффективностью предварительно скомпилированного и совместно используемого кода и преимуществами адаптивно специализированного кода. Например, в CIL предусмотрено несколько конструктивных решений, позволяющих создавать эффективные общие библиотеки, возможно, за счет более специализированного JIT-кода. Реализация JVM в OS X использует общий архив Java. [3] чтобы предоставить некоторые преимущества общих библиотек.

Сравнение реализаций виртуальных машин приложений

[ редактировать ]

Помимо описанных выше портативных виртуальных машин, виртуальные машины часто используются в качестве модели выполнения отдельных языков сценариев, обычно с помощью интерпретатора. В этой таблице перечислены конкретные реализации виртуальных машин, как вышеупомянутых портативных виртуальных машин, так и виртуальных машин на языке сценариев.

Виртуальная машина Языки Комментарии Устный переводчик ТОЧНО в срок Язык реализации SLoC
Общеязыковая среда выполнения (CLR) C# , C++/CLI , F# , VB.NET байт-код — CIL ; Среда выполнения .NET Core на GitHub Нет Да С#, С++
Adobe Flash Player (он же Тамарин ) ActionScript , SWF (формат файла) интерактивный инструмент веб-разработки. байт-код называется «Байт-код ActionScript (.abc)». Да Да С++ 135 тыс. (первоначально выпущено)
Толкай ( Ад ) Лимбо Спецификация виртуальной машины Dis Да Да С 15 тыс. + 2850 за JIT-архив + 500 за ОС хоста
DotGNU - Portable.NET Языки CLI , включая: C#. Клон общеязыковой среды выполнения Нет Да С, С#
Форт Форт Функции упрощены и обычно включают ассемблер, компилятор, интерпретаторы текстового и двоичного уровня, иногда редактор, отладчик и ОС. Скорость компиляции составляет >20 SKLOC/с и ведет себя почти как JIT. Да Нет Форт, Форт-ассемблер от 2,8К до 5,6К; продвинутые, профессиональные реализации меньше.
Глулкс Информ 6, Информ 7, другие Да Нет Существуют различные реализации
ХХВМ PHP , Взлом Это виртуальная машина с открытым исходным кодом, предназначенная для выполнения программ, написанных на Hack и PHP. Да Да С++, OCaml
Икона Икона Базовый исходный код предоставляет как интерпретатор, так и неподдерживаемую версию для компиляции в C. Код времени выполнения, совместно используемый компилятором и интерпретатором, написан на варианте C, называемом RTT. Да Нет C, RTT (специальный интерфейс для C, поставляемый с базовым исходным кодом для Icon). ~180 тысяч всего. (источник в байт-код: ~11 КБ, интерпретатор байт-кода: ~ 46 КБ, iconc: ~ 23 КБ, общие/заголовки: ~ 13 КБ, rtt: ~ 15 КБ)
JVM Java , Kotlin , Jython , Groovy , JRuby , C , C++ , Clojure , Scala и некоторые другие. Эталонная реализация от Sun; OpenJDK : код под лицензией GPL ; IcedTea : код и инструменты под лицензией GPL Да Да JDK , OpenJDK и IcedTea с обычным JIT: Java, C, C++, ASM; IcedTea с «нулевым» JIT: Java, C, C++ JVM составляет около 6500 тыс. строк; TCK — это 80 тысяч тестов и около 1000 тысяч строк.
ЛЛВМ C , C++ , Kotlin , Objective-C , Swift , Ada , Fortran и Rust Поддерживаются выходные данные MSIL, C и C++. Вывод байт-кода ActionScript поддерживается Adobe Alchemy. байт-код называется «Байт-код LLVM (.bc)». сборка называется «Язык ассемблера LLVM (*.ll)». Да Да С++ 811 тыс. [4]
Два Два Да ИгратьДополнительно С 13к + 7к ЛуаЖИТ
ММИКС ММИКСАЛ
Мононуклеоз Языки CLI , включая: C# , VB.NET , IronPython , IronRuby и другие. Клон общеязыковой среды выполнения Да Да С#, С 2332к
НекоВМ в настоящее время Неко и Хаксе Да только x86 С 46 тыс.
Оз Оз, Элис
машина О-кода БКПЛ
машина p-кода Паскаль UCSD Pascal, широко распространенный в конце 70-х, включая Apple II. Да Нет ассемблер, Паскаль
Попугай Perl 5 , Raku , NQP-rx, PIR , PASM , PBC , BASIC , bc , C99 , ECMAScript , Lisp , Lua , m4 , Tcl , WMLScript , XML и другие. Да Да С, Перл 111К С, 240К Перл
Перл виртуальная машина Перл опкодов обходчик дерева Да Нет С, Перл 175К С, 9К Перл
CPython Питон Да С 387k C, 368k Python, 10k ASM, 31k Psyco
PyPy Питон Автономная реализация Python, следующее поколение Psyco Да Да Питон
Рубиниус Руби Виртуальная машина для другой реализации Ruby. Да Да С++, Руби
Сильверлайт С# , VB.NET Микроверсия Microsoft .NET Framework, позволяющая запускать приложения в изолированной программной среде внутри браузера. Да Да С++ 7 МБ (первоначально выпущено)
СкуммВМ Скамм Движок компьютерной игры
SECD ISWIM , Лиспкит Лисп
Белка Белка Да Белка_JIT С++ 12 тыс.
Смолток Смолток
SQLite SQLite-коды операций Механизм виртуальной базы данных
Скрип Писк Самостоятельная реализация виртуальной машины Squeak. Богатая мультимедийная поддержка. Да Ког и Экзюпери Smalltalk/Сленг 110 тыс. Смоллток, ~300 тыс. С
SWI-Пролог Пролог: SWI-Пролог , YAP Да Нет C, SWI-Пролог
TraceMonkey JavaScript На основе Тамарина Нет Да С++ 173 тыс.
TrueType TrueType Механизм рендеринга шрифтов Да Нет С (обычно)
Избирательные ворота x86 / x86-64 двоичные файлы Проверка доступа и утечек памяти под Linux С 467 тыс. [5]
VisualWorks Смолток Нет Да С
Vx32 виртуальная машина x86 двоичные файлы Виртуализация на уровне приложения для машинного кода Нет Да
Он был Виртуальная машина для небольших устройств, похожая на Java
Еще одна виртуальная машина Ruby ( YARV ) Руби Виртуальная машина эталонной реализации для Ruby 1.9 и более новых версий Да Да С
Z-машина Z-код
Зенд-движок PHP Да Нет С 75 тыс.

См. также

[ редактировать ]
  1. ^ «Программа Java Community Process (SM) — JSR: запросы спецификаций Java — подробно JSR № 292» . Jcp.org . Проверено 4 июля 2013 г.
  2. ^ «JITRewrite – Попугай» . Trac.parrot.org . Проверено 4 июля 2013 г.
  3. ^ Документы Apple по использованию OS X общего архива Java.
  4. ^ Инфраструктура компилятора LLVM. Архивировано 31 июля 2012 г. на Wayback Machine , ohloh.net, 30 ноября 2011 г.
  5. Valgrind , ohloh.net, 30 ноября 2011 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e8732ae4ca70cd72d02c1b3c3bb77207__1702987740
URL1:https://arc.ask3.ru/arc/aa/e8/07/e8732ae4ca70cd72d02c1b3c3bb77207.html
Заголовок, (Title) документа по адресу, URL1:
Comparison of application virtualization software - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)