Ответ 1
Виртуальная машина не является альтернативой компиляторам или интерпретаторам. Я думаю, вы думаете о компиляторе JIT, а именно о том, сколько VM реализовано.
Сама виртуальная машина - это именно то, что говорит название - это машина (процессор), которая на самом деле не существует. Например, большинство процессоров не имеют какого-либо внутреннего способа работы с распределением памяти или любого знания типов. Однако Java VM имеет инструкцию new
, которая выделяет экземпляр определенного класса. Разработчики VM решили, что это достаточно важная концепция на этом языке, чтобы заслужить свой собственный код операции, который является основной единицей работы на виртуальной машине.
Преимущества создания собственного набора команд обычно сводятся к разрыву между длинными временами компиляции/оптимизации и медленными интерпретаторами. Например, когда вы компилируете Java-класс, вам не нужно делать какие-либо распределения регистров или вложения или какие-либо из этих традиционных компиляторов. JIT будет делать это позже, но только для тех частей кода, которые вы запускаете достаточно времени, и распространяетесь по ходу программы. Набор инструкций JVM достаточно близок к Java, что исходный компилятор является быстрым, и его просто и быстро читать для виртуальной машины, в отличие от исходного кода Java.
Что касается интерпретаторов против компиляторов JIT, то компромиссы, как правило, связаны с производительностью во время выполнения и временем разработки. JIT занимает гораздо больше времени, чтобы развиваться, но переводчик во время работы намного медленнее. Во многих случаях, например, в сценариях и на небольших и средних веб-сайтах, программа не работает достаточно долго, чтобы вы могли увидеть какие-либо преимущества использования JIT.
Я также должен упомянуть программное обеспечение, такое как VMware. Это также виртуальная машина, но она использует набор команд, который также используется для реального оборудования. Это та же основная концепция, что и язык VM, поскольку он претендует на роль машины, которая физически не присутствует, но на практике она отличается и очень сложной.