Одной из наиболее интересных особенностей Quarkus является возможность запуска приложений, изначально, что позволяет startup очень быстро, и объем памяти совсем маленький . В этой статье будет сделан обзор о том, что такое режим, как он работает, какие есть ограничения и как компилировать код в исходном коде.
Основной режим это просто код Quarkus компиляции, как если бы это был нормальный исполняемый файл (думаю, в код C, скомпилированный или же в веб-браузере). Этот процесс осуществляется с помощью виртуальной машины специальное GraalVM .
В традиционном процессе Java-код компилируется в формате, который называется байт . Во время выполнения, JVM берет этот код и преобразует его в двоичный код, в основном, на компьютере, где JVM работает (этот процесс называется JIT-или Как раз Вовремя (компиляция ).
Для создания образа в машинном коде это делается совсем другой процесс. A GraalVM ума ума текника чамада компиляция с опережением времени (компиляция AOT). Этот процесс не более это скомпилировать код прямо в двоичном формате без пройти через код.
В этом процессе, GraalVM применяется ряд оптимизаций, а также агрессивно. Среди этих оптимизаций, один из самых выделяется анализ кода и вывода классов, которые каким-либо образом, не будут выполнены в конце приложения.
Подводя вывод классы бесполезны, при компиляции кода в машинный код, результатом является исполняемый файл маленький, быстрый запуск и низкое потребление памяти.
Ума explicação mais detalhada подскажите, что такое encontrada нет руководство по GraalVM .
Использовать режим не является панацеей. Есть несколько предпосылок, которые код должен соответствовать он может быть составлен в GraalVM:
- Для компиляции изначально в вашу машину, необходимо установить несколько в некоторых зависимости и сделать некоторые настройки ;
- Коды, которые используют отражением могут быть проблемы, потому что, скорее всего, классы будут взяты из исполняемого конце;
- В JNI, который использует очень отражения не будет работать;
- Сериализация Java не будет работать;
- Java RMI, который зависит от сериализации также не будет работать;
- Юнит-тесты, требуется специальное замечание для тестирования в основном режиме;
- Динамические прокси также не сможет.
Помимо всего этого, процесс для компиляции кода на режим занимает много времени.
Полный список ограничений, которые могут привести к конфликту, отсутствует github da GraalVM .
Для компиляции в основном режиме, просто GraalVM, установленной и скомпилировать проект с profile правильно. Это может быть сделано с помощью следующего кода.
./mvnw package -Pnative.
Однако, процесс установки GraalVM может быть немного запутанным, и содержать некоторые ошибки. Поэтому, другой способ компиляции кода в собственный формат с помощью контейнера docker, который уже все правильно настроить и построить изображение с помощью docker build нескольких этапов. К счастью, уже есть образ docker готова для использования. Просто отредактировать файл .dockerignore, чтобы оставить фильтровать все, что не есть каталог target и запустить dockerfile ниже.
## Estágio 1: compilando nativamente # baixando uma imagem que já tenha a GraalVM instalada e configurada FROM quay.io/quarkus/centos-quarkus-maven:19.3.1-java11 AS build # copiando o pom.xml COPY pom.xml /usr/src/app/ # baixando todas as dependências do projeto RUN mvn -f /usr/src/app/pom.xml -B de.qaware.maven:go-offline-maven-plugin:1.2.5:resolve-dependencies # copiando o código-fonte e alterando o dono para o usuário quarkus COPY src /usr/src/app/src USER root RUN chown -R quarkus /usr/src/app USER quarkus # compilando o código em formato nativo RUN mvn -f /usr/src/app/pom.xml -Pnative clean package ## Estágio 2: criando a imagem docker utilizando o código recém compilado # Usando a imagem da redhat FROM registry.access.redhat.com/ubi8/ubi-minimal WORKDIR /work/ # copiando o executável do container anterior COPY --from=build /usr/src/app/target/*-runner /work/application # dando as permissões ao usuário `1001` RUN chmod 775 /work /work/application \ && chown -R 1001 /work \ && chmod -R "g+rwX" /work \ && chown -R 1001:root /work # expondo a porta 8080 EXPOSE 8080 USER 1001 # executando a aplicação CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
Для создания изображения с помощью этого dockerfile, просто сохраните вышеуказанный файл в каталоге src/main/docker/ имя Для создания изображения с помощью этого dockerfile, просто сохраните вышеуказанный файл в каталоге src/main/docker/
docker build -f src/main/docker/Dockerfile.multistage -t imagem-nativa-compilada .
Это позволяет создать образ docker с вашей программой уже скомпилированные в собственном режиме.
docker run -i --rm -p 8080:8080 imagem-nativa-compilada
Несмотря на удивительно скорости никогда не использовал режим на производстве. У меня есть некоторые вопросы о том, как debugar, у меня много терпения, чтобы ждать его сделать весь процесс сборки и по-прежнему я не прошел по какой-то сценарий, где это было необходимо это оптимизация ресурсов.
Оригинал: “https://dev.to/lucasscharf/uma-breve-explicacao-sobre-o-modo-nativo-do-quarkus-1kn7”