GraalVM: Virtual Machine rápida, poliglota e Cloud Native!

No items found.
24/3/2020
Deusemar Junior
Deusemar Junior
Senior Software Engineer

Programador apaixonado por viagens, música e esportes.

Está sem tempo para ler? Aperte o play para escutar o artigo.

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.

graalvm

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.
cloud native


  • 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.
origin VN e 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 no GraalVM 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?

GraalVM 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:
java blender


  • Execute usando o parametro abaixo e note a diferença
blender java

  • 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:

java microservice

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 "17x5 = 85mb" ao invés de “121x5=605mb").

memory footprint

Créditos e Referência

O que você achou deste conteúdo?
Quer receber nossos conteúdos?
Seu cadastro foi efetuado com sucesso! Enviaremos as novidades no seu email.
Oops! Something went wrong while submitting the form.