O GraalVM é uma máquina vrtual Java (JVM) e kit de desenvolvimento (JDK) baseada em HotSpot / OpenJDK, implementada em Java. Ele oferece suporte a linguagens de programação e modos de execução adicionais, como compilação antecipada de aplicativos Java para inicialização rápida e baixo consumo de memória. A primeira versão estável, GraalVM 19.0, foi lançada em maio de 2019. Já a versão mais recente é a GraalVM 25.3.4.1, disponibilizada em agosto de 2026.

Os maiores diferenciais do GraalVM em comparação com o JDK base são:

GraalVM Compiler, um compilador JIT para Java GraalVM Native Image, permitindo a compilação antecipada de aplicações Java Truffle Language Implementation framework e GraalVM SDK, para implementar runtimes de linguagem de programação adicionais LLVM Runtime e JavaScript Runtime

Objetivos do projeto

Melhorar o desempenho das linguagens baseadas na máquina virtual Java para corresponder ao desempenho das linguagens nativas. Reduzir o tempo de inicialização de aplicativos baseados em JVM, compilando-os antecipadamente com a tecnologia GraalVM Native Image. Habilitar a integração do GraalVM no banco de dados Oracle, OpenJDK, Node.js, Android/iOS e oferecer suporte a incorporações personalizadas semelhantes. Permitir a mistura livre de código de qualquer linguagem de programação em um único programa, anunciado como "aplicativos poliglotas ". Incluir um conjunto facilmente estendido de " ferramentas de programação poliglota ".

História O GraalVM tem suas raízes no projeto Maxine Virtual Machine no Sun Microsystems Laboratories (agora Oracle Labs). O objetivo era escrever uma máquina virtual Java no próprio Java, esperando solucionar os problemas do desenvolvimento em C++, particularmente o gerenciamento manual de memória, e se beneficiar de otimizações metacirculares. Ao perceber que escrever tudo em Java era uma tarefa bastante complicada para um primeiro passo, decidiu-se focar apenas no compilador e conectá-lo ao HotSpot, para reutilizar o máximo possível o ambiente de execução do HotSpot. O compilador GraalVM foi iniciado convertendo manualmente o código do compilador cliente Hotspot (denominado "C1") em Java, substituindo o compilador Maxine anterior.

O GraalVM foi incluído em versões de Java VM baseadas em HotSpot como OpenJDK de Java 9 a 15, a fim de oferecer suporte à compilação experimental antecipada. Ele foi removido no Java 16, pois manter a versão no JDK e o lançamento independente do GraalVM causava esforço duplicado. Uma funcionalidade semelhante para criar executáveis nativos a partir de projetos Java é fornecida pela ferramenta de imagem nativa de versões independentes do GraalVM.

Lançamentos GraalVM está disponível como Community Edition para uma licença de código aberto e como Oracle GraalVM Enterprise Edition, acessível ao aceitar o "Contrato de Licença OTN Oracle GraalVM Enterprise Edition Incluindo Licença para Versões de Adoção Inicial". A Oracle Corporation anunciou o lançamento do Oracle GraalVM Enterprise Edition em 8 de maio de 2019. GraalVM pode substituir um JDK padrão em plataformas Linux e macOS em sistemas x86 de 64 bits.

Graal VM 22 GraalVM 22.3.0 GraalVM 22.3.0 foi lançado em outubro de 2022.

GraalVM 22.2.0 GraalVM 22.2.0 foi lançado em julho de 2022.

GraalVM 22.1.0 GraalVM 22.1.0 foi lançado em abril de 2022.

GraalVM 22.0.0 GraalVM 22.0.0 foi lançado em janeiro de 2022.

Graal VM 21

Graal VM 20 GraalVM 20.3.0 foi lançado em novembro de 2020. Foi marcada como a primeira versão corporativa LTS do GraalVM e como o lançamento final para 2020. Esta versão suporta compartilhamento de código no tempo de execução GraalVM LLVM, permitindo que o AST e o código compilado de bibliotecas de bitcode comuns sejam compartilhados entre vários contextos em um único mecanismo.

GraalVM 20.3.0 foi lançado em novembro de 2020. Foi marcada como a primeira versão corporativa LTS do GraalVM e como o lançamento final para 2020. Esta versão suporta compartilhamento de código no tempo de execução GraalVM LLVM, permitindo que o AST e o código compilado de bibliotecas de bitcode comuns sejam compartilhados entre vários contextos em um único mecanismo.

Graal VM 20.1.0

GraalVM 20.1.0 foi lançado em maio de 2020.GraalVM 20.1 Ele incluiu várias melhorias para muitos dos componentes. Além das melhorias de desempenho, foram publicadas correções de usabilidade para imagens nativas . O mecanismo JavaScript oferece suporte a todos os recursos do modo ECMAScript 2020 por padrão. O mecanismo de expressão regular ( TRegex ) usado por JavaScript e Python suporta todas as expressões agora. Ruby ( TruffleRuby ) melhorado em compatibilidade com gems nativas.

Graal VM 20.0.0

GraalVM 20.0.0 foi lançado em fevereiro de 2020.A look at GraalVM 20.0: better Windows support, better Native Images, better tooling Ele melhorou em seu suporte ao Windows, trouxe uma ferramenta de imagem nativa aprimorada e melhorou o suporte de ferramentas, entre muitas alterações detalhadas no compilador e nas linguagens suportadas.

Graal VM 19 Graal VM 19.0.0

O suporte no Windows está atualmente em desenvolvimento e lançado como uma funcionalidade de adoção inicial no GraalVM 19.0.

O GraalVM 19.0 é baseado no JDK versão 8u212.

Componentes O compilador GraalVM é distribuído com os componentes de uma máquina virtual Java padrão (OpenJDK). Componentes adicionais estão incluídos no GraalVM para suportar novos modos de execução (GraalVM Native Image) ou linguagens de programação (LLVM runtime, GraalVM JavaScript como um possível substituto para o obsoleto mecanismo Nashorn, TRegex como um mecanismo de expressão regular).

GraalVM Compiler O GraalVM Compiler é um moderno compilador Java just-in-time. Ele complementa ou substitui os compiladores existentes (C1/C2 no HotSpot). Em contraste com os compiladores existentes, o compilador GraalVM é escrito de maneira modular, sustentável e extensível no próprio Java.

É lançado sob GPL versão 2 com a exceção classpath.

GraalVM Native Image GraalVM Native Image é uma tecnologia de compilação avançada que produz binários executáveis de arquivos de classe. Ele é lançado como um plug-in de adoção inicial, o que significa que está pronto para produção, mas pode incluir atualizações incompatíveis de backport em versões futuras.

Esta funcionalidade suporta linguagens baseadas em JVM, mas opcionalmente pode executar linguagens dinâmicas, desenvolvidas sobre GraalVM com framework Truffle. O arquivo executável não é executado em uma JVM e usa componentes de tempo de execução necessários como agendamento de threads ou GC de Substrate VM - uma versão trivial de uma máquina virtual. Como o binário nativo resultante já inclui classes de aplicativos, dependências JDK e bibliotecas, o tempo de inicialização e execução é reduzido significativamente.

O GraalVM Native Image é oficialmente suportado pelos frameworks Fn, Gluon, Helidon, Micronaut, Picocli, Quarkus, Vert.x e Spring Boot Java. Em setembro de 2016, a Oracle detalhou planos para adicionar compilação antecipada ao OpenJDK usando o compilador GraalVM para Java 9. Esta proposta, rastreada pela JEP 295: Ahead-of-Time Compilation, foi incluída no Java 9. O uso experimental do GraalVM como um compilador just-in-time foi adicionado para a plataforma Linux x86-64 para Java 10.

Nas versões 9 a 15 do JDK, o comando cria uma imagem nativa. O sinalizador experimental habilita o uso do Graal JIT. Desde então, a funcionalidade está disponível no componente de imagem nativa das versões autônomas do GraalVM.

Truffle Language Implementation Framework Em associação com o GraalVM, o Oracle Labs desenvolveu um interpretador de árvore de sintaxe abstrata de linguagem chamado "Truffle" que permitiria a implementação de linguagens sobre o GraalVM. Muitas linguagens foram implementadas no Truffle, incluindo um interpretador C que afirma ser tão rápido quanto o GCC e o Clang.

O framework Truffle e sua parte dependente, GraalVM SDK, são lançados sob a Licença Permissiva Universal, versão 1.0, para encorajar o uso do framework para projetos que não querem estar vinculados aos direitos autorais ou nem a outras licenças.

Suporte de ferramenta baseado em instrumentação Uma grande vantagem do ecossistema GraalVM é o suporte de instrumentação totalmente dinâmica e independente de linguagem integrada diretamente no tempo de execução da VM. Eventos de execução podem ser capturados por clientes de API com sobrecarga extremamente baixa em código totalmente otimizado.

A instalação principal do GraalVM fornece um depurador independente de linguagem, criador de perfil, visualizador de heap e outros com base em instrumentação e outro suporte de VM. O GraalVM também inclui uma implementação de back-end do protocolo de depuração remota do Chrome Inspector. Embora projetado originalmente para depuração de JavaScript, ele pode ser usado para depurar todas as linguagens do GraalVM a partir de um navegador.

Suporte de linguagens e tempo de execução GraalVM é escrito em e para o ecossistema Java. Ele pode executar aplicações escritas em todas as linguagens que compilam no formato Java bytecode, por exemplo Java, Scala e Kotlin.

Com base na estrutura de implementação de linguagem Truffle, linguagens adicionais podem ser suportados no GraalVM.

GraalVM JavaScript: GraalVM JavaScript github repository JavaScript runtime compatível com ECMAScript 2021, com suporte para Node.js TruffleRuby: TruffleRuby github repository Implementação da linguagem Ruby com suporte preliminar para Ruby on Rails FastR: GraalVM FastR github repository Implementação da linguagem R GraalVM Python: GraalPython github repository Implementação da linguagem Python 3 GraalVM LLVM Runtime ( Sulong ): GraalVM LLVM Runtime github repository Implementação do interpretador de bitcode LLVM GraalWasm: Uma implementação de WebAssembly

O suporte para linguagens adicionais pode ser implementado pelos usuários do GraalVM. Algumas implementações importantes para linguagem de terceiros são grCuda,grCuda GitHub repository SOMns,SOMns GitHub repository TruffleSqueak,TruffleSqueak GitHub repository e Yona.Yona Language

Referências

Ligações externas

Categoria:Programas de computador da Oracle Corporation Categoria:Softwares multiplataformas Categoria:JVM Categoria:Compiladores Java Categoria:Maquina virtual Java