Віртуальна машина, як і JVM, - це програма, яка приймає як введення, як правило, файли, набір простих інструкцій (які, як правило, легко конвертувати в реальні інструкції CPU), і насправді компілює та запускає їх як рідні інструкції процесора (як правило, використовуючи компілятор на вимогу, такий як HotSpot або JIT).
По суті це шар абстракції. Зазвичай набагато простіше перенести реалізацію набору інструкцій VM в різні архітектури процесорів через декілька подібностей (наприклад, на основі стека). Також набагато простіше переносити різні мови програмування на інструкції VM, оскільки він більше орієнтований на сучасні мови програмування, ніж на примітивні інструкції процесора. Багато віртуальних машин, таких як JVM та CLR (.NET), містять інструкції щодо виклику віртуальних методів та створення об'єктів.
Тож візьмемо для прикладу мову. Назвіть це MyLanguage. Оскільки це мова програмування, вона в кінцевому підсумку складається до набору деяких інструкцій архітектури процесора. Це означає, що, маючи набір сумісних, гнучких наборів інструкцій щодо віртуальної машини, можна також скласти MyLanguage до набору інструкцій цього віртуального комп'ютера.
Завжди виникає питання ефективності, оскільки вам може знадобитися зламати деякі шляхи вирішення в наборах інструкцій VM, які вам не доведеться робити на самому собі, але це все-таки можливо.