GraalVM es un Java VM y JDK basado en HotSpot / OpenJDK , implementado en Java . Admite lenguajes de programación y modos de ejecución adicionales, como la compilación anticipada de aplicaciones Java para un inicio rápido y una huella de memoria reducida . La primera versión lista para producción, GraalVM 19.0, se lanzó en mayo de 2019. [5] La versión más reciente es GraalVM 20.3.0, disponible en noviembre de 2020.
Desarrollador (es) | Oracle Corporation |
---|---|
Lanzamiento estable | 21.0.0 [1] / 19 de enero de 2021 |
Repositorio | |
Escrito en | Java |
Sistema operativo | Linux , Windows y macOS [2] |
Plataforma | máquina virtual de Java |
Tipo | Tiempo de ejecución y compilador dinámico de Java |
Licencia | Edición comunitaria: GPLv2 [3] [4] Edición empresarial: software de prueba |
Sitio web | www |
Los principales diferenciadores de GraalVM en comparación con el JDK base son:
- Compilador GraalVM , un compilador JIT para Java
- Imagen nativa de GraalVM , que permite la compilación anticipada de aplicaciones Java
- El marco de implementación de Truffle Language y GraalVM SDK , para implementar tiempos de ejecución de lenguaje de programación adicionales
- Tiempo de ejecución de LLVM y tiempo de ejecución de JavaScript
Objetivos del proyecto
- Mejorar el rendimiento de los lenguajes basados en máquinas virtuales Java para igualar el rendimiento de los lenguajes nativos. [6] [7]
- Para reducir el tiempo de inicio de las aplicaciones basadas en JVM compilándolas con anticipación con la tecnología GraalVM Native Image.
- Para habilitar la integración de GraalVM en la base de datos de Oracle, OpenJDK, Node.js, Android / iOS y para admitir incrustaciones personalizadas similares.
- Para permitir la mezcla de código de forma libre de cualquier lenguaje de programación en un solo programa, facturado como " aplicaciones políglotas ". [6] [8]
- Incluir un conjunto fácilmente ampliado de " herramientas de programación políglota ". [6] [9]
Historia
GraalVM tiene sus raíces en el proyecto Maxine Virtual Machine en Sun Microsystems Laboratories (ahora Oracle Labs ). El objetivo era escribir una máquina virtual Java en Java mismo, con la esperanza de liberar al desarrollo de los problemas del desarrollo en C ++, en particular la gestión manual de la memoria, y beneficiarse de las optimizaciones meta-circulares . Al darse cuenta de que escribir todo en Java era demasiado ambicioso como primer paso, se tomó la decisión de centrarse solo en el compilador y conectarlo a Hotspot, para reutilizar tanto como fuera posible el tiempo de ejecución de Hotspot. El compilador GraalVM se inició convirtiendo manualmente el código del compilador del cliente Hotspot (llamado "C1") a Java, reemplazando el compilador Maxine anterior. [10]
Graal se incluyó en las versiones de Java VM basadas en HotSpot como OpenJDK de Java 9 a 15, pero se eliminó en Java 16 por falta de uso. [11]
Lanzamientos
GraalVM es un software listo para producción y está disponible como Community Edition para una licencia de código abierto y como Oracle GraalVM Enterprise Edition accesible al aceptar el Acuerdo de licencia OTN Oracle GraalVM Enterprise Edition, incluida la licencia para las versiones de primeros usuarios. [12] Oracle Corporation anunció el lanzamiento de Oracle GraalVM Enterprise Edition el 8 de mayo de 2019. [13] GraalVM puede sustituir un JDK predeterminado en plataformas Linux y macOS en sistemas x86 de 64 bits.
GraalVM 20
- GraalVM 20.3.0
GraalVM 20.3.0 se lanzó en noviembre de 2020. [14] Se marcó como la primera versión empresarial LTS de GraalVM y como la versión final para el año 2020. Esta versión admite el uso compartido de código en el tiempo de ejecución de GraalVM LLVM, lo que permite el AST y el código compilado de bibliotecas de códigos de bits comunes para compartir entre múltiples contextos dentro de un solo motor.
- GraalVM 20.1.0
GraalVM 20.1.0 se lanzó en mayo de 2020. [15] Incluyó varias mejoras para muchos de los componentes. Además de las mejoras de rendimiento, se publicaron correcciones de usabilidad para imágenes nativas . El motor de JavaScript admite todas las funciones del modo ECMAScript 2020 de forma predeterminada. El motor de expresiones regulares ( TRegex ) utilizado por JavaScript y Python ahora admite todas las expresiones. Ruby ( TruffleRuby ) mejorado en compatibilidad con gemas nativas.
- GraalVM 20.0.0
GraalVM 20.0.0 se lanzó en febrero de 2020. [16] Mejoró su soporte de Windows, trajo una herramienta de imagen nativa mejorada y mejoró el soporte de herramientas, entre muchos cambios detallados en el Compilador y los lenguajes compatibles.
GraalVM 19
- GraalVM 19.0.0
El soporte en Windows se encuentra actualmente en desarrollo y se lanzó como una funcionalidad de adopción temprana en GraalVM 19.0.
GraalVM 19.0 se basa en la versión superior de JDK 8u212.
Componentes
El compilador GraalVM se envía con los componentes de una máquina virtual Java normal ( OpenJDK ). Se incluyen componentes adicionales en GraalVM para admitir nuevos modos de ejecución ( GraalVM Native Image ) o lenguajes de programación ( LLVM runtime , GraalVM JavaScript como posible reemplazo del obsoleto motor Nashorn , TRegex como motor de expresión regular ).
Compilador GraalVM
El compilador GraalVM es un compilador moderno de Java justo a tiempo . Complementa o reemplaza a los compiladores existentes (C1 / C2 en HotSpot ). A diferencia de los compiladores existentes, el compilador GraalVM está escrito de forma modular, mantenible y ampliable en Java.
Se publica bajo GPL versión 2 con la excepción classpath .
Imagen nativa de GraalVM
GraalVM Native Image es una tecnología de compilación avanzada que produce binarios ejecutables de archivos de clase. [17] Se lanza como un complemento de adopción temprana, lo que significa que está listo para producción, pero puede incluir actualizaciones incompatibles con el backport en versiones futuras.
Esta funcionalidad admite lenguajes basados en JVM, pero opcionalmente puede ejecutar lenguajes dinámicos, desarrollados sobre GraalVM con el marco Truffle. El archivo ejecutable no se ejecuta en una JVM y utiliza los componentes de tiempo de ejecución necesarios como programación de subprocesos o GC de "Substrate VM", una versión trivial de una máquina virtual. Dado que el binario nativo resultante ya incluye clases de aplicaciones, dependencias de JDK y bibliotecas, el tiempo de inicio y ejecución se reduce significativamente.
GraalVM Native Image es oficialmente compatible con los marcos Java Fn, Gluon, Helidon, Micronaut, Picocli, Quarkus y Vert.x. [18] El soporte para aplicaciones Spring Boot está en desarrollo. En septiembre de 2016, Oracle detalló planes para agregar una compilación anticipada a OpenJDK utilizando el compilador GraalVM para Java 9 . [19] [20] Esta propuesta, seguida por el JEP 295: Compilación anticipada, se incluyó en Java 9. [21] Se agregó el uso experimental de GraalVM como compilador justo a tiempo para Linux x86 -Plataforma 64 para Java 10 . [22]
El jaotc
comando crea una imagen nativa. [23] La -XX:+EnableJVMCIProduct
bandera experimental permite el uso de Graal JIT. [24]
Marco de implementación de Truffle Language
En asociación con GraalVM, Oracle Labs desarrolló un intérprete de árbol de sintaxis abstracta de lenguaje llamado "Truffle" que le permitiría implementar lenguajes sobre GraalVM. [25] [26] Se han implementado muchos lenguajes en Truffle, incluido un intérprete de C que afirma ser tan rápido como GCC y Clang. [27]
El marco Truffle y su parte dependiente, GraalVM SDK, se publican bajo la Licencia Permisiva Universal , versión 1.0, para fomentar el uso del marco para proyectos que no quieren estar sujetos a los derechos de autor u otros derechos de los padres.
Soporte de herramientas basado en instrumentación
Una de las principales ventajas del ecosistema GraalVM es el soporte de instrumentación totalmente dinámico independiente del lenguaje integrado directamente en el tiempo de ejecución de la VM. Los clientes de API pueden capturar los eventos de ejecución con una sobrecarga extremadamente baja en un código totalmente optimizado. [28] [29]
La instalación principal de GraalVM proporciona un depurador, un generador de perfiles, un visor de montón y otros independientes del idioma basados en la instrumentación y otro soporte de VM. [9] GraalVM también incluye una implementación de backend del protocolo de depuración remota de Chrome Inspector. [30] Aunque se diseñó originalmente para la depuración de JavaScript, se puede utilizar para depurar todos los lenguajes de GraalVM desde un navegador.
Soporte de idioma y tiempo de ejecución
GraalVM está escrito en y para el ecosistema Java . Puede ejecutar aplicaciones escritas en todos los lenguajes que se compilan en el formato de código de bytes de Java, por ejemplo, Java, Scala , Kotlin y más.
Basado en el marco de implementación de Truffle Language, se pueden admitir idiomas adicionales en GraalVM.
- GraalVM JavaScript: [31] Tiempo de ejecución de JavaScript compatible con ECMAScript 2019, con soporte para Node.js
- TruffleRuby: [32] Implementación del lenguaje Ruby con soporte preliminar para Ruby on Rails
- FastR: [33] implementación del lenguaje R
- GraalVM Python: [34] Implementación del lenguaje Python 3
- Tiempo de ejecución de GraalVM LLVM ( SuLong ): [35] Implementación del intérprete de código de bits de LLVM
- GraalWasm: [36] [37] Una implementación de WebAssembly
Los usuarios de GraalVM pueden implementar soporte para idiomas adicionales. Algunas implementaciones de lenguaje de terceros notables son grCuda, [38] SOMns, [39] TruffleSqueak, [40] [41] y Yona. [42]
Referencias
- ^ https://www.graalvm.org/release-notes/21_0/ .
- ^ "Descargas" .
- ^ "Preguntas frecuentes de GraalVM" . Consultado el 25 de abril de 2018 .
- ^ "graal / README.md" . Consultado el 25 de abril de 2018 .
- ^ "Para la creación de programas que se ejecutan más rápido en cualquier lugar: Oracle GraalVM Enterprise Edition" . Oracle Corporation . Consultado el 9 de mayo de 2019 .
- ^ a b c "Por qué GraalVM" . Consultado el 25 de abril de 2018 .
- ^ "Graal: Un compilateur dynamique pour Java" . lemondeinformatique.fr. 2012-02-13 . Consultado el 23 de agosto de 2013 .
- ^ "Manual de referencia para aplicaciones políglotas" . Consultado el 25 de abril de 2018 .
- ^ a b "Herramientas de seguimiento y depuración de GraalVM" . www.graalvm.org . Consultado el 8 de abril de 2019 .
GraalVM proporciona un conjunto de herramientas para desarrolladores, integradores y administradores de TI para depurar y monitorear GraalVM y las aplicaciones implementadas.
- ^ https://web.archive.org/web/20200529203136/https://adambien.blog/roller/abien/entry/meta_circularity_is_near_graalvm
- ^ "[JDK-8255616] Eliminación de características experimentales AOT y Graal JIT" . bugs.openjdk.java.net . Consultado el 13 de marzo de 2021 .
- ^ [1]
- ^ "GraalVM 19.3: anunciando GraalVM 19.3 con soporte JDK 11" . Oracle Corporation . Consultado el 25 de noviembre de 2019 .
- ^ Šelajev, Oleg (20 de noviembre de 2020). "GraalVM 20.3 está disponible" . Medio . Consultado el 31 de diciembre de 2020 .
- ^ GraalVM 20.1
- ^ Una mirada a GraalVM 20.0: mejor compatibilidad con Windows, mejores imágenes nativas, mejores herramientas
- ^ [2]
- ^ "Ecosistema de código abierto GraalVM" . Oracle Corporation . Consultado el 11 de septiembre de 2019 .
- ^ "La compilación anticipada (AOT) puede llegar a OpenJDK HotSpot en Java 9" . InfoQ.com. 2016-10-01 . Consultado el 6 de octubre de 2016 .
AOT trae una nueva herramienta llamada 'jaotc' que usa Graal como backend (para generar código)
- ^ Vladimir Kozlov (14 de septiembre de 2016). "JDK-8166089: Compilación anticipada" . Oracle Corporation . Consultado el 6 de octubre de 2016 .
Compile las clases de Java de una aplicación en código nativo antes de iniciar la máquina virtual.
- ^ Vladimir Kozlov (13 de octubre de 2016). "JEP 295: compilación anticipada" . Oracle Corporation . Consultado el 13 de octubre de 2016 .
Compile clases de Java en código nativo antes de iniciar la máquina virtual.
- ^ Vladimir Kozlov (20 de octubre de 2017). "JEP 317: compilador JIT experimental basado en Java" . Oracle Corporation . Consultado el 21 de enero de 2018 .
JEP 317: compilador JIT experimental basado en Java
- ^ "OpenJDK: Graal" . openjdk.java.net .
- ^ "[JDK-8232118] Agregar opción JVM para habilitar compiladores JVMCI en modo producto" . bugs.openjdk.java.net .
- ^ "Trufa: un sistema de tiempo de ejecución que se optimiza automáticamente" (PDF) . Oracle Corporation . Consultado el 23 de agosto de 2013 .
- ^ "Trufa servida en un Santo Graal: Graal y Trufa para interpretación de lengua políglota en la JVM" . 2017-12-05 . Consultado el 25 de abril de 2018 .
- ^ "Trufa: Idiomas y material" . Gist .
- ^ Van De Vanter, Michael; Seaton, Chris; Haupt, Michael; Humer, cristiano; Würthinger, Thomas (9 de marzo de 2018). "Soporte de instrumentación políglota, rápido y flexible para depuradores y otras herramientas". El arte, la ciencia y la ingeniería de la programación . 2 (3, artículo 14): 30. arXiv : 1803.10201v1 . Código Bib : 2018arXiv180310201V . doi : 10.22152 / programming-journal.org / 2018/2/14 .
- ^ "Introducción a los instrumentos en GraalVM" . www.graalvm.org . Consultado el 8 de abril de 2019 .
Truffle Instruments puede rastrear eventos de tiempo de ejecución de nivel de VM muy detallados para perfilar, inspeccionar y analizar el comportamiento de tiempo de ejecución de las aplicaciones que se ejecutan en GraalVM.
- ^ "Chrome DevTools" . developers.google.com . Consultado el 8 de abril de 2019 .
Chrome DevTools es un conjunto de herramientas de desarrollo web integradas directamente en el navegador Google Chrome. DevTools puede ayudarlo a editar páginas sobre la marcha y diagnosticar problemas rápidamente, lo que, en última instancia, lo ayuda a crear mejores sitios web, más rápido.
- ^ Repositorio de github JavaScript de GraalVM
- ^ Repositorio TruffleRuby github
- ^ Repositorio de github GraalVM FastR
- ^ Repositorio de github GraalPython
- ^ Repositorio de github en tiempo de ejecución de GraalVM LLVM
- ^ "Repositorio de github de GraalWasm" .
- ^ Prokopec, Aleksandar (2 de diciembre de 2019). "Anuncio de GraalWasm - un motor de montaje web en GraalVM" . Medio . Consultado el 15 de enero de 2020 .
- ^ Repositorio grCuda GitHub
- ^ Repositorio de GitHub de SOMns
- ^ Repositorio TruffleSqueak GitHub
- ^ Niephaus, Fabio; Felgentreff, Tim; Hirschfeld, Robert (2019). "GraalSqueak: Hacia una plataforma de herramientas basada en Smalltalk para la programación políglota" . Biblioteca digital ACM . Consultado el 8 de noviembre de 2020 .
- ^ Idioma de Yona
enlaces externos
- Proyecto Graal en OpenJDK
- Graalvm en GitHub
- graal en GitHub