Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.
Сегодня мы собираемся представить spring-native, который позволяет вашей весенней загрузочной программе испытать возможности компилятора graalvm и скомпилировать ваше приложение прямо в натив!
Нет необходимости снова устанавливать jre, ваше приложение будет работать непосредственно на целевой машине, как и exe! И время запуска составляет менее 1 секунды.
Чтобы испытать эту функцию, мы возьмем демо из весенней загрузки.
https://start.spring.io/
Выберите эту экспериментальную функцию SpringNative здесь. После загрузки вы можете использовать maven для упаковки и тестирования.
mvn spring-boot:build-image
gradle bootBuildImage
Посмотрите на эту непобедимую скорость запуска... 0,038 секунды... почти мгновенно!
Магия!
Все это благодаряgraalvm
переводчик. Однако для его использования необходимо как минимум обновить JDK до версии 11, что можно рассматривать как другой тип драйвера для пользователей Java8.
Конечно, Spring Native поддерживается только в версиях SpringBoot после 2.4.5.
Что такое GraalVM?
Graalvm также является проектом оракула, и его кодовый адрес:
https://github.com/oracle/graal
Адрес проекта:
www.graalvm.org/docs/
Graalvm — это виртуальная машина, которая хочет объединить мир. Поскольку его сравнивают с HotSpotVM, он также может запускать другие языки, такие как ruby, python, php и т. д.
Это новая JVM, разница в том, что из-за адаптации она позволяет запускать разные языки под одной и той же виртуальной машиной.
Взгляните на картинку ниже, чтобы увидеть, насколько амбициозен graalvm.
Это еще не конец, самая привлекательная часть этого заключается в том, что он может напрямую упаковывать код приложения вnative
Двоичный исполняемый код среды выполнения даже не нуждается в JVM!
Как мы все знаем, натив и работающий в вм — это совершенно два сорта, иначе не будет такой офигенной технологии, как jit. Даже Android и iOS знают, что беглость нативных приложений намного выше, чем при работе с моносенсорным или гибридным интерфейсом.Для приложений корпоративного уровня, которые стремятся к производительности, эта функция более практична.
Удивительно, но он реализует мост, который может общаться между языками. Например, я оптимистично отношусь к библиотеке на js, и мне не нужно ее переделывать, ее можно использовать прямо в Java. Это связано с тем, что graalVM разработала протокол межъязыковой совместимости для обеспечения межъязыковой совместимости.
Сейчас эта функция поддерживается большинством платформ.
Что называется родным? Рассмотрим код ниже.
public class Example {
public static void main(String[] args) {
String str = "Native Image is awesome";
String reversed = reverseString(str);
System.out.println("The reversed string is: " + reversed);
}
public static String reverseString(String str) {
if (str.isEmpty())
return str;
return reverseString(str.substring(1)) + str.charAt(0);
}
}
Обычно мы запускаем его напрямую или упаковываем в jar-пакет.
javac Example.java
java Example
Но мы можем сделать еще один шаг — сделать файл класса естественным.
native-image Example
При выполнении просто введите./Example
Вот и все.
какая польза?
Приложения, скомпилированные с помощью Native, могут запускаться за считанные секунды, работать быстрее и занимать меньше памяти. Это больше соответствует основным методам развертывания, таким как микросервисы, k8s и т. д.
Но он также отличается от традиционной JVM, в основном:
- Анализ производительности системы будет дан на этапе компиляции
- Бесполезные части и код не будут компилироваться и будут удалены, благодаря модульности предыдущих версий Java.
- Рефлексию, ресурсы и динамические прокси нужно конвертировать заранее, без задержки загрузки класса
- classpath фиксируется на этапе компиляции
- Класс не будет загружаться лениво, он будет помещаться в память при запуске
Хотя натив имеет много преимуществ, время его компиляции очень велико, потому что требуется много статического анализа кода, что также является общей проблемой всех нативных программ.
End
Эта идея тонкой банки, кажется ли, что разработка Java все больше и больше похожа на golang? Из-за этого изменения образ докера также станет меньше и чище, а приложение Java без jre будет все больше и больше походить на настоящую программу.
Но, к сожалению, хотя эта идея компиляции в натив и хороша, она пока не может конкурировать с golang на данном этапе, в основном из-за разницы в компиляторах.
надеюсьgraalvm
Я могу продолжать напрягать свои силы, продолжать летать с явой десятилетиями и растить три поколения своих детей и внуков!
Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.