GraalVM es un kit de desarrollo de Java (JDK) escrito en Java. La distribución de código abierto de GraalVM se basa en OpenJDK , y la distribución empresarial en Oracle JDK. Además de la compilación justo a tiempo (JIT) , GraalVM también puede compilar una aplicación Java con antelación. Esto permite una inicialización más rápida, un mayor rendimiento en tiempo de ejecución y un menor consumo de recursos, pero el ejecutable resultante solo puede ejecutarse en la plataforma para la que fue compilado.
Proporciona lenguajes de programación y modos de ejecución adicionales. La primera versión lista para producción, GraalVM 19.0, se distribuyó en mayo de 2019. [ 5 ] La versión más reciente es GraalVM para JDK 24.0.2, disponible desde julio de 2025. [ 6 ]
Las principales diferencias entre GraalVM y el JDK base incluyen:
- Graal Compiler , un compilador justo a tiempo (JIT) .
- GraalVM Native Image es una tecnología para compilar aplicaciones Java con antelación.
- Truffle Language Implementation Framework y GraalVM SDK, un framework basado en Java y una colección de API para desarrollar entornos de ejecución de lenguajes de alto rendimiento.
- GraalVM Polyglot API , una API para integrar código de lenguaje invitado en una aplicación anfitriona basada en Java.
- JavaScript Runtime, un entorno de ejecución de JavaScript compatible con ECMAScript 2023, así como Node.js.
- LLVM Runtime es un entorno de ejecución para lenguajes que pueden transformarse en código intermedio de LLVM.
Objetivos
- Para mejorar el rendimiento de los lenguajes basados en la máquina virtual Java (JVM) para que coincidan con los lenguajes nativos. [ 7 ] [ 8 ]
- Para reducir el tiempo de inicio de las aplicaciones basadas en JVM compilándolas con antelación.
- Para permitir la integración de GraalVM en Oracle Database, OpenJDK, Android/iOS y otras integraciones personalizadas similares.
- Para permitir la integración de código de lenguaje invitado en una aplicación anfitriona basada en JVM .
- Para permitir la mezcla de código de cualquier lenguaje de programación en una sola aplicación, denominada "aplicación políglota". [ 7 ] [ 9 ]
Historia
GraalVM tiene sus raíces en el proyecto de máquina virtual Maxine de Sun Microsystems Laboratories (ahora Oracle Labs ). El objetivo del proyecto era escribir una máquina virtual Java en Java para evitar los problemas del desarrollo en C++, en particular la gestión manual de la memoria, y beneficiarse de las optimizaciones metacirculares . El proyecto cambió su enfoque hacia el compilador y su integración con el entorno de ejecución HotSpot en la medida de lo posible. El compilador de GraalVM, Graal, se inició convirtiendo manualmente el código del compilador del cliente HotSpot (llamado "C1") a Java, reemplazando al compilador Maxine anterior. [ 10 ]
Graal se incluyó en versiones de JDK basadas en HotSpot, como OpenJDK, desde Java SE 9 hasta 15, para proporcionar compilación experimental anticipada. La opción UseJVMCICompiler también permitía usar Graal como reemplazo del compilador del servidor (llamado "C2"). [ 11 ] Esta opción se eliminó en Java SE 16 para evitar el esfuerzo duplicado de mantener una versión en el JDK y una versión independiente de GraalVM. Una función similar para crear un ejecutable nativo a partir de una aplicación Java la proporciona la native-imageherramienta de las versiones independientes de GraalVM. La herramienta procesa las clases y otros metadatos de una aplicación Java para crear un binario para un sistema operativo y arquitectura específicos. Puede usarse para crear un ejecutable nativo o una biblioteca compartida nativa.
Comunicados
GraalVM está disponible como Oracle GraalVM bajo la licencia GraalVM Free Terms and Conditions (GFTC), como Oracle GraalVM Enterprise Edition accesible aceptando el "OTN License Agreement Oracle GraalVM Enterprise Edition Including License for Early Adopter Versions" [ 12 ] o como Community Edition con una licencia de código abierto. Oracle Corporation anunció el lanzamiento de Oracle GraalVM Enterprise Edition el 8 de mayo de 2019 y de Oracle GraalVM el 13 de junio de 2023, introduciendo una nueva licencia GraalVM Free Terms and Conditions (GFTC). GraalVM puede sustituir a un JDK predeterminado en plataformas Linux y macOS en CPU x64 y AArch64, y en una plataforma Windows x64. El calendario de lanzamientos se encuentra en el Centro de ayuda de Oracle y en el sitio web de GraalVM.
Componentes
El compilador GraalVM, Graal, se distribuye con los componentes de una máquina virtual Java estándar ( OpenJDK ). GraalVM incluye componentes adicionales para habilitar nuevos modos de ejecución ( GraalVM Native Image ) o lenguajes de programación ( entorno de ejecución LLVM , GraalVM JavaScript como posible reemplazo del motor Nashorn obsoleto , TRegex como motor de expresiones regulares ).
Compilador
El compilador GraalVM, Graal, es un compilador Java (JIT) moderno . Complementa o reemplaza a los compiladores existentes (C1/C2 en HotSpot ). A diferencia de estos compiladores, Graal está escrito de forma modular, mantenible y extensible en Java. Se publica bajo la licencia GPL versión 2 con la excepción de classpath .
Imagen nativa
GraalVM Native Image es una tecnología de compilación anticipada que produce binarios ejecutables de archivos de clase. [ 13 ] Se lanza como una tecnología de adopción temprana, lo que significa que está lista para producción, pero puede incluir actualizaciones incompatibles con versiones anteriores en futuras versiones.
Esta funcionalidad admite lenguajes basados en JVM, pero opcionalmente puede ejecutar lenguajes dinámicos desarrollados sobre GraalVM con el framework Truffle. El archivo ejecutable no se ejecuta en una JVM y utiliza componentes de tiempo de ejecución necesarios, como la planificación de subprocesos o el recolector de basura, de una máquina virtual personalizada mínima llamada Substrate VM. Dado que el binario nativo resultante ya incluye clases de aplicación, dependencias de JDK y bibliotecas, el tiempo de inicio y ejecución se reduce significativamente.
GraalVM Native Image cuenta con soporte oficial de los frameworks Java Fn, Gluon, Helidon, Micronaut , Picocli, Quarkus , Vert.x y Spring Boot . [ 14 ] [ 15 ]
En septiembre de 2016, Oracle detalló sus planes para agregar compilación anticipada al OpenJDK utilizando el compilador GraalVM para Java SE 9. [ 16 ] [ 17 ] Esta propuesta, seguida por JEP 295: Compilación anticipada , se incluyó en Java SE 9. [ 18 ] El uso experimental de GraalVM como compilador justo a tiempo se agregó para la plataforma Linux x64 para Java SE 10. [ 19 ]
En las versiones 9 a 15 de Java SE, el jaotccomando crea un ejecutable. [ 20 ]-XX:+EnableJVMCIProduct La bandera experimental habilita el uso del compilador Graal JIT. [ 21 ] La funcionalidad está disponible desde entonces en el componente Native Image de las versiones independientes de GraalVM. [ 22 ]
Marco de implementación del lenguaje Truffle
En asociación con GraalVM, Oracle Labs desarrolló un intérprete de árbol de sintaxis abstracta (AST) llamado "Truffle" que le permite implementar lenguajes sobre GraalVM. [ 23 ] [ 24 ] Muchos lenguajes se han implementado en Truffle, incluyendo un intérprete de C experimental que afirma ser tan rápido como GCC y Clang . [ 25 ]
El framework Truffle y su componente dependiente, GraalVM SDK, se publican bajo la Licencia Permisiva Universal , versión 1.0, para fomentar el uso del framework en proyectos que no desean estar sujetos a los derechos de autor u otros derechos de propiedad intelectual.
Soporte de herramientas basado en instrumentación
Una ventaja importante del ecosistema GraalVM es su soporte de instrumentación totalmente dinámico e independiente del lenguaje , integrado directamente en el entorno de ejecución de la máquina virtual. Los clientes de la API pueden capturar eventos de ejecución con una sobrecarga extremadamente baja en código totalmente optimizado. [ 26 ] [ 27 ]
La instalación básica de GraalVM proporciona un depurador independiente del lenguaje, un generador de perfiles, un visor de memoria dinámica y otras herramientas basadas en la instrumentación y el soporte de la máquina virtual. [ 28 ] GraalVM también incluye una implementación de backend del protocolo de depuración remota Chrome Inspector. [ 29 ] Aunque fue diseñado originalmente para la depuración de JavaScript, puede utilizarse para depurar todos los lenguajes de GraalVM desde un navegador.
Lenguajes de incrustación
Otra ventaja de GraalVM es la posibilidad de incrustar código de un lenguaje invitado en Java y escribir aplicaciones "políglotas". [ 9 ] Un desarrollador puede integrar JavaScript, Python u otros lenguajes compatibles dentro del código fuente Java, lo que les otorga las ventajas características de dichos lenguajes. Una aplicación Java anfitriona y un lenguaje invitado intercambian datos en el mismo espacio de memoria. Esto es posible gracias al marco de implementación de lenguajes Truffle [ 30 ] y la API políglota de GraalVM. A continuación se muestra un ejemplo de cómo llamar a una función definida en Python desde Java:
try ( Context context = Context . create ()) {Función de valor = contexto.eval ( " python " , "lambda x: x + 1" ) ;función de aserción . canExecute ();int x = function . execute ( 41 ). asInt ();afirmar x == 42 ;}La función de Python incrementa su valor de entrada en uno y devuelve el resultado al lenguaje anfitrión. Desde Java, por motivos de seguridad, primero preguntamos si la función variable se puede ejecutar mediante la canExecute()llamada, y luego invocamos la función con la execute()llamada. Encontrará más ejemplos en la documentación de referencia de Embedding Languages .
Soporte de lenguaje y de tiempo de ejecución
GraalVM está escrito en y para el ecosistema Java . Puede ejecutar aplicaciones escritas en todos los lenguajes que se compilan al formato de bytecode de Java , por ejemplo, Java, Scala , Kotlin y otros.
Basándose en el marco de implementación de lenguajes Truffle, los siguientes lenguajes adicionales están diseñados para su uso con GraalVM:
- GraalJS: [ 31 ] Un entorno de ejecución de JavaScript compatible con ECMAScript 2023, con soporte para Node.js
- GraalPy: [ 32 ] Una implementación del lenguaje Python 3
- GraalVM LLVM Runtime ( Sulong ): [ 33 ] Una implementación de intérprete de bitcode de LLVM
- GraalWasm: [ 34 ] [ 35 ] Una implementación de WebAssembly
- TruffleRuby: [ 36 ] Una implementación del lenguaje Ruby con soporte preliminar para Ruby on Rails
- FastR: [ 37 ] Una implementación del lenguaje R
Los usuarios de GraalVM pueden implementar soporte para lenguajes adicionales. Algunas implementaciones de lenguajes de terceros destacadas son grCuda, [ 38 ] SOMns, [ 39 ] TruffleSqueak, [ 40 ] [ 41 ] y Yona. [ 42 ]
Referencias
- ↑ "GraalVM 25.1.3" . 30 de junio de 2026. Consultado el 30 de junio de 2026 .
- ↑ "Descargas" .
- ↑ "Preguntas frecuentes sobre GraalVM" . Archivado del original el 13 de abril de 2020. Consultado el 25 de abril de 2018 .
- ↑ "graal/README.md" . GitHub . Consultado el 25-04-2018 .
- ↑ "Para crear programas que se ejecuten más rápido en cualquier lugar: Oracle GraalVM Enterprise Edition" . Oracle Corporation . Consultado el 21 de enero de 2022 .
- ↑ "GraalVM para JDK 24.0.2" . GraalVM . Oracle Corporation . Consultado el 15 de agosto de 2025 .
- 1 2 "Por qué GraalVM" . Recuperado el 25 de abril de 2018 .
- ^ "Graal : un compilador dinámico para Java" . limondeinformatique.fr. 2012-02-13 . Consultado el 23 de agosto de 2013 .
- 1 2 "Manual de referencia para aplicaciones políglotas" . Archivado del original el 23-10-2020 . Recuperado el 25-04-2018 .
- ↑ ""La metacircularidad está cerca", GraalVM, podcast Truffle--airhacks.fm : Blog de Adam Bien . Archivado del original el 29 de mayo de 2020.
- ↑ "OpenJDK: Graal" .
- ↑ "Acuerdo de licencia de desarrollo de GraalVM de Oracle Technology Network" . Oracle . 2 de mayo de 2019. Consultado el 21 de septiembre de 2025 .
- ↑ "Imágenes nativas" . www.graalvm.org . Archivado del original el 20 de abril de 2018.
- ↑ "Ecosistema de código abierto GraalVM" . Oracle Corporation . Consultado el 11 de septiembre de 2019 .
- ↑ "Documentación de Spring Native Image" . Spring Framework . Consultado el 26 de octubre de 2021 .
- ↑ "La compilación anticipada (AOT) podría llegar a OpenJDK HotSpot en Java 9" . InfoQ.com. 1 de octubre de 2016. Consultado el 6 de octubre de 2016. AOT
introduce una nueva herramienta llamada 'jaotc' que utiliza Graal como backend (para generar código).
- ↑ Kozlov, Vladimir (14 de septiembre de 2016). "JDK-8166089: Compilación anticipada" . Oracle Corporation . Consultado el 6 de octubre de 2016.
Compila las clases Java de una aplicación a código nativo antes de iniciar la máquina virtual.
- ↑ Kozlov, Vladimir (13 de octubre de 2016). "JEP 295: Compilación anticipada" . Oracle Corporation . Consultado el 13 de octubre de 2016. Compilar
clases Java a código nativo antes de iniciar la máquina virtual.
- ↑ Kozlov, Vladimir (2017-10-20). "JEP 317: Compilador JIT experimental basado en Java" . Oracle Corporation . Recuperado el 2018-01-21 .
JEP 317: Compilador JIT experimental basado en Java
- ↑ «OpenJDK: Graal» . openjdk.java.net .
- ↑ " [ JDK-8232118 ] Agregar opción de JVM para habilitar compiladores JVMCI en modo producto" . bugs.openjdk.java.net .
- ↑ "GraalVM: Manual de referencia: Imagen nativa" . graalvm.org .
- ↑ "Truffle: Un sistema de tiempo de ejecución autooptimizable" (PDF) . Oracle Corporation . Consultado el 23 de agosto de 2013 .
- ↑ "Trufa servida en un Santo Grial: Graal y Trufa para la interpretación de lenguajes políglotas en la JVM" . 5 de diciembre de 2017. Consultado el 25 de abril de 2018 .
- ↑ "Trufa: Lenguajes y material" . Resumen .
- ↑ Van De Vanter, Michael; Seaton, Chris; Haupt, Michael; Humer, Christian; Würthinger, Thomas (9 de marzo de 2018). "Soporte de instrumentación rápido, flexible y políglota para depuradores y otras herramientas". The Art, Science, and Engineering of Programming . 2 (3, Artículo 14): 30. arXiv : 1803.10201 . doi : 10.22152/programming-journal.org/2018/2/14 . S2CID 4382172 .
- ↑ "Primeros pasos con Instruments en GraalVM" . www.graalvm.org . Consultado el 8 de abril de 2019. Los
instrumentos
Truffle
pueden rastrear eventos de tiempo de ejecución a nivel de máquina virtual con granularidad muy fina para perfilar, inspeccionar y analizar el comportamiento en tiempo de ejecución de las aplicaciones que se ejecutan en GraalVM.
- ↑ "Herramientas de depuración y monitorización de GraalVM" . www.graalvm.org . Archivado del original el 25/04/2019 . Consultado el 08/04/2019 .
GraalVM proporciona un conjunto de herramientas para desarrolladores, integradores y administradores de TI para depurar y monitorizar GraalVM y las aplicaciones desplegadas.
- ↑ "Chrome DevTools" . developers.google.com . Consultado el 8 de abril de 2019. Chrome
DevTools es un conjunto de herramientas para desarrolladores web integradas directamente en el navegador Google Chrome. DevTools te permite editar páginas sobre la marcha y diagnosticar problemas rápidamente, lo que en definitiva te ayuda a crear mejores sitios web con mayor rapidez.
- ↑ "Truffle: Un sistema de tiempo de ejecución autooptimizable" (PDF) . Oracle Corporation . Consultado el 23 de agosto de 2013 .
- ↑ Repositorio de GitHub de GraalVM JavaScript
- ↑ Repositorio de GraalPython en GitHub
- ↑ Repositorio de GitHub de GraalVM LLVM Runtime
- ↑ "Repositorio de GraalWasm en GitHub" . GitHub .
- ↑ Prokopec, Aleksandar (2019-12-02). "Anuncio de GraalWasm : un motor WebAssembly en GraalVM" . Medium . Consultado el 15 de enero de 2020 .
- ↑ Repositorio de GitHub de TruffleRuby
- ^ Repositorio github GraalVM FastR
- ↑ Repositorio de grCuda en GitHub
- ↑ Repositorio de SOMns en GitHub
- ↑ Repositorio de GitHub de TruffleSqueak
- ↑ Niephaus, Fabio; Felgentreff, Tim; Hirschfeld, Robert (2019). «GraalSqueak: Hacia una plataforma de herramientas basada en Smalltalk para la programación políglota» . Actas de la 16.ª Conferencia Internacional ACM SIGPLAN sobre Lenguajes de Programación Gestionados y Entornos de Ejecución - MPLR 2019. Biblioteca Digital ACM. págs. 14–26 . doi : 10.1145/3357390.3361024 . ISBN 9781450369770. S2CID 204728643 . Consultado el 08-11-2020 .
- ↑ Idioma Yona
Enlaces externos
- Software multiplataforma
- compiladores de Java
- Software de plataforma Java
- máquina virtual Java
- Software Oracle
- Máquinas virtuales basadas en pila