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

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

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

Содержание
  • 1 Сравнение виртуальных машин
  • 2 Сравнение реализаций виртуальных машин приложений
  • 3 См. Также
  • 4 Ссылки
Сравнение виртуальных машин
JavaScript машины не включены. Чтобы найти их, см. Список движков ECMAScript.

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

Виртуальная машина Модель машины Управление памятью Безопасность кода Интерпретатор JIT AOT Общие библиотеки Общий язык Объектная модель Динамический набор
Android Runtime (ART)регистр автоматическийДаДаДаДа?ДаДа
Common Language Runtime (CLR)стек автоматический или ручнойДаДаДаДаДаДаДа
Dis (Inferno )регистр автоматическийДаДаДаДаДаДаДа
DotGNU Portable.NET стек автоматический или ручнойДаДаДаДаДаДаНет
Виртуальная машина Java (JVM)стек автоматическиДаДаДаДаДаДаДа
JikesRVM стек автоматическийДаДаДаДа?ДаДа
LLVM регистр вручнуюНетДаДаДаДаДаНет
Монохромный стек автоматически или вручнуюДаДаДаДаДаДаДа
Регистр Parrot автоматическийНетДаNoДаДаДаДа
Регистр Dalvik автоматическийДаДаДаНет?НетНет
Писк стек автоматическиНетДаДаНетДаНетДа
BEAM (Эрланг )регистр автоматический?ДаДаДаДаДаДа
MoarVM регистр автоматический?ДаДаДаДаДаДа

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

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

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

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

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

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

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

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

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

Виртуальная машина Языки КомментарииИнтерпретатор JIT Язык реализацииSLoC
Common Language Runtime (CLR)C#, C ++ / CLI, F#, Байт-код VB.NET - CIL ;.NET Core Runtime на GitHubНетДаC #, C ++
Adobe Flash Player (он же Tamarin )ActionScript, SWF (формат файла)интерактивный инструмент веб-разработки. Байт-код называется «Байт-код ActionScript (.abc)»ДаДаC ++135k (изначально выпущено)
Dis (Inferno )Limbo Спецификация виртуальной машины DisДаДаC15k + 2850 на JIT-архитектуру + 500 на хост ОС
DotGNU - Portable.NET языки интерфейса командной строки включая: C# клон среды CLIНетДаC, C #
Forth Forth Функции упрощены, обычно включают ассемблер, компилятор, текстовый и двоичный интерпретаторы уровня, иногда редактор, отладчик и ОС. Скорость компиляции составляет>20 SKLOC / S и ведет себя во многом как JIT.ДаНетForth, Forth Assemblerот 2,8K до 5,6K; расширенные профессиональные реализации меньше.
Glulx Inform 6, Inform 7, другиеДаНетСуществуют различные реализации
HHVM PHP, Hack Является открытым - исходная виртуальная машина, предназначенная для выполнения программ, написанных на Hack и PHP.ДаДаC ++, OCaml
Icon IconБазовый исходный код предоставляет как интерпретатор, так и неподдерживаемую компиляцию -to-C версия. Код времени выполнения, который совместно используется компилятором и интерпретатором, написан на варианте C, называемом RTT.ДаНетC, RTT (настраиваемый интерфейс для C, предоставляемый с базовым исходным кодом для Icon).~ 180 тыс. Всего. (источник в байт-код: ~ 11k, интерпретатор байт-кода: ~ 46k, iconc: ~ 23k, общие / заголовки: ~ 13k, rtt: ~ 15k)
JVM Java, Kotlin, Jython, Groovy, JRuby, C, C ++, Clojure, Scala и некоторые другиеЭталонная реализация Sun; OpenJDK : код под GPL ; IcedTea : код и инструменты под GPL ДаДаJDK, OpenJDK IcedTea с обычным JIT: Java, C, ASM; IcedTea с "нулевым" JIT: Java, CJVM занимает около 6500 тыс. Строк; TCK - это 80 тыс. Тестов и около 1000 тыс. Строк
LLVM C, C ++, Kotlin, Objective-C, Swift, Ada, Fortran и Rust Поддержка вывода MSIL, C и C ++. Вывод байтового кода ActionScript поддерживается Adobe Alchemy. Байт-код называется «Байт-код LLVM (.bc)». сборка называется "Язык ассемблера LLVM (*.ll)".ДаДаC ++811k
Lua LuaДаLuaJITC13k + 7k LuaJIT
MMIX MMIXAL
Mono языки интерфейса командной строки, включая: C#, VB.NET, IronPython, IronRuby и другиеклон среды CLRДаДаC #, C2332k
Oz Oz, Алиса
NekoVM в настоящее время Neko и Haxe Датолько x86C46k
O-code machine BCPL
машина p-кода Pascal UCSD Pascal, широко распространенная в конце 70-х, включая Apple II
Parrot Perl 5, Raku, NQP-rx, PASM, PBC, BASIC, bc, C99, ECMAScript, Lisp, Lua, m4, Tcl, WMLScript, XML и другиеДаДаC, Perl111k C, 240k Perl
Виртуальная машина Perl Perl op-code tree walkerДаНетC, Perl175k C, 9k Perl
CPython Python ДаPsyco C387k C, 368k Python, 10k ASM, 31k Psyco
PyPy Python Self-hosting реализация Python, следующее поколение Psyco ДаДаPython
Rubinius Ruby Виртуальная машина для другой реализации RubyДаДаC ++, Ruby
Silverlight C#, VB.NET Микроверсия Microsoft.NET Framework, позволяющая приложениям работать в изолированной программной среде внутри браузераДаДаC ++7 МБ (изначально выпущено)
ScummVM Scumm Движок компьютерных игр
SECD ISWIM, Lispkit Lisp
Белка БелкаДаSquirrel_JITC ++12k
Smalltalk Smalltalk
SQLite Коды операций SQLiteВиртуальный движок базы данных
Squeak Squeak Smalltalk Самостоятельный хостинг реализация виртуальной машины Squeak. Богатая мультимедийная поддержка.ДаCog ExuperySmalltalk / SlangSmalltalk 110k, ~ 300K C
TraceMonkey JavaScriptНа основе Tamarin НетДаC ++173k
TrueType TrueType Механизм визуализации шрифтовДаНетC (обычно)
Valgrind x86 / x86-64 двоичные файлыПроверка доступ к памяти и утечки в Linux C467k
VisualWorks Smalltalk НетДаC
Vx32 виртуальная машинаx86 двоичные файлыВиртуализация на уровне приложений для машинного кодаНетДа
Waba Виртуальная машина для небольших устройств, аналогичная Java
Еще один Ruby VM (YARV )Ruby Виртуальная машина эталонной реализации для Ruby 1.9 и более новых версийДаДаC
Z -machine Z-Code
Zend Engine PHP ДаНетC75k ​​
См. также
Ссылки
Последняя правка сделана 2021-05-15 08:02:37
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте