Когда и почему для нативного образа требуется SubstrateVM Framwork?
Я читал о GraalVM и фреймворке SubstrateVM. Я понимаю, чтоnative-image
Команда может использоваться для создания собственных приложений из исходных файлов Java следующим образом:
$ javac Hello.java
$ native-image --no-server --no-fallback Hello
$ ./hello
Hello World!
$
Это создает собственный двоичный файл hello
, который, согласно этому вопросу, работает на платформе SubstrateVM, которая обеспечивает...
... другие вещи (время выполнения), необходимые для фактического запуска скомпилированного заранее байт-кода Java без JVM.
Мне это непонятно:
- Когда и зачем нужен фреймворк SubstrateVM? Это требуется только во время собственной сборки или также во время выполнения? Есть ли
hello
двоичный файл состоит из чистого байт-кода целевой машины или все еще есть байт-код Java и встроенная полноценная виртуальная машина, а именно SubstrateVM? - Какие накладные расходы требуют
hello
собственный образ для запуска по сравнению с обычнымHello World!
Программа C?
1 ответ
Хороший пример для понимания происходящего - сборщик мусора.
У JVM есть один, поэтому вам не нужно вручную управлять памятью. Но когда вы создаете собственный образ, в вашем Java-коде его нет, верно? Таким образом, собственный инструмент создания изображений связывает сборщик мусора SubstrateVM с вашим приложением, чтобы сгенерированный двоичный файл мог собирать свой собственный мусор, и вам это не нужно.
Это означает, что виртуальная машина субстрата необходима во время сборки и во время выполнения. Это также означает, что в двоичном файле нет байт-кода и нет "встроенной полноценной виртуальной машины".