Depois de mais de um ano com várias versões candidatas lançadas, começando com a versão 1.0 RC1 de abril/2018, a Oracle lançou a esperada versão GA do GraalVM 19.0, a máquina virtual e plataforma poliglota criada pela Oracle Labs. Os recursos adicionados nas versões RC no ano passado incluem a migração do agora obsoleto engine do Nashorn (JEP 335) para o GraalVM; a integração com a biblioteca Python numpy; e um interpretador LLVM no modo gerenciado. Além disso, traz o libgraal, compilador para o GraalVM que pode ser implementado como imagem nativa através do SubstrateVM. A Oracle Labs também apresentou a release do GraalVM Enterprise Edition.
O GraalVM é composto pelo Graal, um compilador just-in-time escrito em Java; o SubstrateVM, uma estrutura que permite a compilação antecipada de aplicativos Java em imagens executáveis; e o Truffle, um kit de ferramentas de código aberto, incluindo uma API para construção de interpretadores de linguagens.
Os principais componentes do GraalVM 19.0 são:
- Uma JVM HotSpot compatível com o OpenJDK 1.8.0_212.
- O NodeJS 10.15.2, com recursos poliglotas;
- Um mecanismo (engine) JavaScript, compatível com ECMAScript 2019, como substituto ao Rhino e o agora obsoleto Nashorn. A Oracle Labs oferece uma Guia de migração descrevendo as diferenças entre o GraalVM e o Nashorn;
- Um runtime para o LLVM versão 6.0;
- O atualizador do GraalVM, chamado
gu
: utilitário que faz o download de componentes não incluídos na distribuição principal do GraalVM, como o Native Image e o suporte a Python, Ruby e R.
O utilitário de Native Image
foi incluído nas distribuições de versões RC do GraalVM, mas foi separado na versão 19.0 do GraalVM, exigindo instalação separada usando o utilitário gu
. O gu
funciona de maneira semelhante a outros gerenciadores de pacotes, como o SDK Man e o Homebrew. Para instalar o Native Image ou o Python, por exemplo, deve-se usar:
$ gu install native-image
$ gu install python
Por ser uma versão estável, a Oracle Labs alterou o número de versão do GraalVM de 1.0 RCxx para 19.x, refletindo também o ano do release principal, que incluirá atualizações periódicas. Detalhes sobre todos os novos recursos do GraalVM podem ser encontrados no histórico de versões.
GraalVM Enterprise Edition
O GraalVM Enterprise Edition foi criado para aplicativos de missão crítica em produção, contexto em que o desempenho, a segurança e a escalabilidade são especialmente necessários. Os benefícios oferecidos pelo Enterprise Edition, com relação ao Community Edition, segundo a Oracle, incluem melhor desempenho e menor consumo de memória; recursos de sandboxing para código nativo; e opções de suporte comercial.
Os algoritmos de otimização incorporados no GraalVM Enterprise oferecem, ainda, melhoria de 20% no desempenho, através de uma reorganizanção do código compilado nativamente.
Abaixo, é mostrada a arquitetura do GraalVM Enterprise, extraída do post da Oracle referido anteriormente.
O manual de referência do GraalVM é um bom ponto de partida para desenvolvedores interessados em usar a tecnologia em suas aplicações em Java (e em outras linguagens da JVM), além de JavaScript, Python, Ruby e R. A Oracle também publicou uma apresentação sobre o gerenciamento seguro e eficiente de memória híbrida para Java, em que discute detalhes sobre a arquitetura do Truffle, o modelo de execução do SubstrateVM e a funcionalidade de microbenchmarking.
O GraalVM pode ser integrado com frameworks de microsserviços Java/JVM, como Micronaut, Helidon e Quarkus.
Referências
- Anúncio do GraalVM (17 de abril de 2018);
- GraalVM 1.0, máquina virtual e plataforma poliglota (27 de abril de 2018);
- Suporte para migração de Nashorn (19 de julho de 2018);
- Lançamento do GraalVM 19.0 (9 de maio de 2019);
- Helidon com GraalVM (17 de abril de 2019);
- Agente de Rastreamento (5 de junho de 2019);
- Benchmark de desempenho Renaissance para comparação de JVMs (6 de junho de 2019).