Интерпретаторы vs компиляторы vs виртуальные машины

У меня вопрос об интерпретаторах, компиляторах и VM

теперь я знаю различия между интерпретаторами и компиляторами, но чем отличается ВИРТУАЛЬНЫЕ МАШИНЫ из предыдущих 2? Каковы плюсы и минусы виртуальной машины по сравнению с интерпретаторами и компиляторами?

Спасибо большое

3 ответов


виртуальная машина не является альтернативой компиляторам или интерпретаторам. Я думаю, вы думаете о компиляторе JIT, который является тем, сколько VMs реализованы.

сама виртуальная машина-это именно то, что говорит имя - это машина (процессор), которая на самом деле не существует. Например, большинство процессоров не имеют никакого внутреннего способа работы с выделением памяти или каких-либо знаний о типах. Однако Java VM имеет new инструкция, которая выделяет экземпляр некоторый класс. Разработчики виртуальной машины решили, что это достаточно важная концепция в языке, чтобы заслужить свой собственный код операции, который является фундаментальной единицей работы в виртуальной машине.

преимущества создания собственного набора инструкций обычно заключаются в преодолении разрыва между длительным временем компиляции/оптимизации и медленными интерпретаторами. Например, когда вы компилируете класс Java, вам не нужно делать какое-либо распределение регистра или вставку или любой из этих традиционных компиляторов. Этот JIT сделает это позже, но только для тех частей кода, которые вы запускаете достаточное количество раз и распространяете по ходу программы. Набор инструкций JVM достаточно близок к Java, что начальная компиляция быстра, и она проста и быстра для чтения для виртуальной машины, в отличие от исходного кода Java.

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

Я также должен упомянуть программное обеспечение, такое как VMware. Это также Виртуальная машина, но она использует набор инструкций, который также используется на реальном оборудовании. Это та же основная концепция, что и языковая виртуальная машина, поскольку она притворяется машиной, которая физически не присутствует, но на практике она отличается и очень сложный.


Простом Английском Языке

компилятор превращает один язык в другой. Например, C# в IL, Java в байтовый код, C++ в двоичный машинный код. Не выполняются на этапе компиляции.

переводчик интерпретирует (выполняет) одну строку за раз из исходного файла. Такие как PHP, Perl, другие скриптовые языки

Виртуальная Машина может относиться к нескольким вещам, двух я знаю из:

  • виртуальная машина, связанная с гипервизором, например Hyper-V, Xen. Они позволяют запускать несколько ОС на одном аппаратном обеспечении
  • время выполнения программного обеспечения, как Виртуальная Машина Java, Среда CLR. Эта часть программного обеспечения позволяет запускать независимый от платформы промежуточный язык (код IL, байтовый код) и выполнять машинные инструкции (просто-в-время сборник). Как правило, такие ВМ несет ответственность за другие вспомогательные задачи: управление ресурсами, памяти очистка, нарезание резьбы, безопасности и т. д.

нет никаких плюсов и минусов. Все трое выполняют разную работу, которую трудно сравнить.

языки и платформы приходят в определенном порядке, есть буквально сотни других образцов


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

  • реальная машина-это та, чей машинный код выполняется аппаратным
  • виртуальная машина-это та, чей "машинный код" выполняется интерпретатором.

интерпретаторы против компиляторов

ответ здесь