Когда и почему для нативного образа требуется 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 с вашим приложением, чтобы сгенерированный двоичный файл мог собирать свой собственный мусор, и вам это не нужно.

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

Другие вопросы по тегам