Хорошим примером для понимания того, что происходит, является сборщик мусора.
В JVM есть такой, поэтому вам не нужно вручную управлять памятью. Но когда вы создаете собственный образ, в вашем коде java его нет, верно? Таким образом, собственный инструмент для работы с изображениями объединяет сборщик мусора SubstrateVM с вашим приложением, так что сгенерированный двоичный файл может собирать свой собственный мусор, и вам это не нужно.
Это означает, что Substrate VM необходима во время сборки и во время выполнения. Это также означает, что в двоичном файле нет никакого байт-кода и нет «встроенной полноценной виртуальной машины».