A Oracle criou o projeto GraalVM para melhorar a performance das aplicações e diminuir o consumo de memória atendendo principalmente a necessidade de aplicações no ambiente de nuvem, onde a principal tarefa é criar uma nova Máquina Virtual para substituir a JVM do Java.
O que é GraalVM?
É um ecossistema compartilhado em tempo de execução que oferece vantagens de desempenho.
Como?
- Compilador GraalVM – gera código compilado para executar no HotSpot VM ou em máquina virtual de imagem nativa.
- Imagem nativa do GraalVM – permite que aplicativos com script sejam compilados com antecedência em um binário que é executado nativamente no sistema.
- Recursos Poliglota – suporta Java, Scala, Kotlin, JavaScript e Node.js. É possível criar um serviço usando duas linguagens ao mesmo tempo, ou seja, Java usando bibliotecas Python. Veja um exemplo.
- Framework de implementação de linguagens: permite implementar qualquer linguagem para o ambiente GraalVM.
- Interpretador LLVM: permite que o código nativo seja executado em um ambiente gerenciado no GraalVM.
Quais são os benefícios?
Alta eficiência
O GraalVM consegue melhorar o desempenho em até 3x em uma ampla variedade de quesitos no novo benchmark da JVM chamado “Renaissance”, que foi aceito na conferência de linguagem de programação mais prestigiada – PLDI.
Os resultados de benchmark e desempenho são mantidos pela Universidade Charles em Praga e estão disponíveis no site renaissance.dev. Ele é ideal para ambientes nativos da nuvem, porque inicia os serviços 100 vezes mais rápido, além de reduzir o uso de memória em até 5X (Quarkus.io), compilando o Java antecipadamente.
Segurança
Inclui recursos de segurança para solucionar algumas vulnerabilidades das fontes comuns de aplicativos de segurança, incluindo estouros de buffer no código nativo.
Agilidade
Poliglota: permite que aplicativos herdados sejam modernizados e novos sejam construídos mais rapidamente. Java, JavaScript, Ruby, Python e R estão disponíveis com desempenho competitivo no mesmo ambiente de execução.
Interoperabilidade
Os idiomas executados podem se chamar sem sobrecarga e as bibliotecas de outros idiomas podem ser usadas.
Incorporabilidade “Embeddability”
Incorpora linguagens dinamicamente e código nativo com recursos de sandbox.
Ferramentas
O GraalVM se beneficia das ferramentas baseadas em JVM e todas as linguagens compartilham ferramentas comuns, como depuração e criação de perfil.
Qual versão usar?
19.3 é a primeira versão com suporte a longo prazo (LTS) da VM criada a partir da linha principal do projeto. Isso significa que continuará recebendo atualizações de segurança, estabilidade e desempenho até a próxima versão do LTS.
GraalVM: instalação Linux e Mac
1) Faça o download do arquivo e descompacte em uma pasta.
2) Configure a variável de ambiente:
– GraalVM bin folder to the PATH environment variable: $ export PATH=<path to GraalVM>/Contents/Home/bin:$PATH. Verify whether you are using GraalVM with the echo command: $ echo $PATH
– Set the JAVA_HOME environment variable to resolve to the GraalVM installation directory: $ export JAVA_HOME=<path to GraalVM>/Contents/Home. Please also see the notice on java_home command.
Veja alguns exemplos de performance em Java.
- Abra o terminal e crie um arquivo com o comando touch Blender.java
– touch Blender.java
– Edite o arquivo e coloque o seguinte conteúdo:
<p> CODE:https://gist.github.com/deusemarjunior/9564f0c7620551d56b4e55ee267a5b98.js</p>
- Compile e rode a classe seguindo a imagem abaixo:
- Execute usando o parametro abaixo e note a diferença
- Leve e Cloud Nativo
Vários projetos aceitaram o GraalVM Native Image como uma plataforma para suas aplicações.
Você pode usar os seguintes frameworks de microserviço: O Spring Framework anunciou recentemente suporte para imagens nativas nas próximas versões.
No startup das aplicações, a diferença entre usar imagem nativa chega a ser 50 vezes mais rápido se comparar com não nativas, como mostra o gráfico:
O resultado é semelhante quando analisamos o consumo médio de memória “memory footprint” e isso faz uma diferença muito grande quando é preciso escalar a aplicação, pois o consumo de recurso será muito menor (5 microserviços usando Quarkus nativo usariam “17×5 = 85mb” ao invés de “121×5=605mb”).
Créditos e Referência
- Este texto teve a colaboração e revisão da Alina Yurenko.
- https://www.graalvm.org/docs/
- https://rieckpil.de/whatis-graalvm/
- https://medium.com/graalvm/lightweight-cloud-native-java-applications-35d56bc45673