Я написал пару постов о GraalVM здесь, на dev.to: Создание собственного интерфейса командной строки с помощью Kotlin и GraalVM и создание собственного приложения ktor с помощью GraalVM
Существует множество статей, восхваляющих GraalVM за то, как быстро запускаются приложения и как мало памяти он использует, и все это правда. Однако обычно вы не видите, чтобы люди говорили о компромиссах.
Недавно я запустил приложение micronaut для подключения к mysql и представления данных через контроллер rest. Простое, но немного больше, чем приложение типа hello world. Скоро я опубликую полный пост и исходный код.
Так что, если вы просто посмотрите на одни только улучшения скорости, это довольно захватывающе:
Вот мое приложение, работающее как jar
20:42:29.364 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 2085ms. Server Running: http://localhost:8080
И здесь он работает как родной образ:
20:41:09.832 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 37ms. Server Running: http://localhost:8080
Однако создание приложения – это не что иное, как болезненное занятие. Есть много подводных камней, когда дело доходит до нативных приложений. Инструментарий, безусловно, улучшается, но вам все равно нужно быть очень осторожным с отражением (в этом вопросе micronaut – такое благословение по сравнению, например, с Spring).
Просто посмотрите, сколько памяти требуется для компиляции этого простого приложения на моем ноутбуке (MacBook Pro 2017 года 16 ГБ оперативной памяти).:
[micronaut-graal:1288] classlist: 9,486.18 ms, 1.47 GB [micronaut-graal:1288] (cap): 3,953.01 ms, 1.47 GB [micronaut-graal:1288] setup: 5,767.97 ms, 1.47 GB [micronaut-graal:1288] (typeflow): 161,511.61 ms, 12.77 GB [micronaut-graal:1288] (objects): 164,768.04 ms, 12.77 GB [micronaut-graal:1288] (features): 9,852.69 ms, 12.77 GB [micronaut-graal:1288] analysis: 352,973.84 ms, 12.77 GB [micronaut-graal:1288] (clinit): 7,207.49 ms, 12.78 GB [micronaut-graal:1288] universe: 24,093.15 ms, 12.78 GB [micronaut-graal:1288] (parse): 19,852.03 ms, 12.79 GB [micronaut-graal:1288] (inline): 23,210.25 ms, 12.79 GB [micronaut-graal:1288] (compile): 56,323.43 ms, 12.80 GB [micronaut-graal:1288] compile: 111,321.81 ms, 12.80 GB [micronaut-graal:1288] image: 12,677.21 ms, 12.80 GB [micronaut-graal:1288] write: 4,104.11 ms, 12.80 GB [micronaut-graal:1288] [total]: 521,240.14 ms, 12.80 GB
Моя цель с помощью этого приложения состояла в том, чтобы запустить его как бессерверное приложение в Google Cloud Run. Поэтому мне пришлось создать контейнер docker и поместить его в gcr.io . И поскольку мне нужно было создать образ linux, а не OSX, я использовал Google Cloud Build, проблема в том, что при этом происходит сбой облачной сборки, обычный экземпляр не может обрабатывать 13 ГБ памяти, запрошенной контейнером, поэтому мне пришлось его усилить: gcloud builds submit-highcpu-32
Прежде чем даже писать о приложении или о том, какую скорость я смог выжать из java-приложения, я думаю, важно посмотреть, сколько времени вы, как разработчик, потратите на решение проблем с отражением или ожидание завершения этапов компиляции.
У Graal VM многообещающее будущее, и я надеюсь на это, просто, возможно, еще не готов к прайм-тайму.
Счастливого кодирования
Оригинал: “https://dev.to/viniciusccarvalho/graalvm-native-not-quite-there-yet-4apb”