GraalVM: Instalación y Primeros Pasos

El otro día publicamos este post presentando GraalVM, una tecnologías que sin duda va a hacerse importante dentro del ecosistema Java en este mundo actual (por suerte mis predicciones en el ámbito tecnológico funcionan mejor que en otros ámbitos 😉 ).

Hoy vamos a ver cómo instalarlo en nuestro PC y generar nuestra primera imagen nativa…

Instalación de GraalVM

Lo primero que debemos hacer es descargar GraalVM desde la página de Oracle para vuestro sistemas operativo (existen para Linux, MacOS y Windows) en https://www.oracle.com/downloads/graalvm-downloads.html

Yo he descargado la versión para Java 8 pero hay otra para Java 11:

GraalVM se distribuye como un ZIP, basta con descomprimirlo y crear la variable GRAAL_HOME apuntando a ese directorio (%GRAAL_HOME% en Windows, $GRAAL_HOME en Linux)

Si entráis en la carpeta veréis esto:

Y si hacéis:

Comprobaréis que una JVM 8 dentro…de hecho si añadimos %GRAAL_HOME%bin al %PATH% estaremos usando la JVM de GraalVM como JVM por defecto.

En la distribución core también tenemos la JVM Javascript (ejecutable vía js) pero además puedo descargarme los paquetes para lenguajes como Python.

Instalar extensión para Native Images

Esta extensión no va en el paquete core, pero puedo decargarla desde Oracle: https://www.oracle.com/downloads/graalvm-downloads.html

Se distribuye como un JAR (native-image-installable-svm-svmee-java8-windows-amd64-20.0.0.jar) y se instala con el comando gu (gu install -L c:tempnative-image-installable-svm-svmee-java8-windows-amd64-20.0.0.jar)

 

Ejemplo GraalVM usando capacidades Polyglotas de GraalVM

Una vez tenemos instalado GraalVM y el soporte para imágenes nativas veamos un ejemplo…

Crearemos esta clase:

Seguro que entendéis que está haciendo el ejemplo, básicamente estamos leyendo por consola un JSON en Java y luego en Javascript parseándolo y hacendo el beautify:

Veámoslo en ejecución, primero lo compilo:

Luego creo un fichero test.json con un JSON (por ejemplo este {“GraalVM”:{“description”:”Language Abstraction Platform”,”supports”:[“combining languages”,”embedding
languages”,”creating native images”],”languages”: [“Java”,”JavaScript”,”Node.js”, “Python”, “Ruby”,”R”,”LLVM”]}})

Y finalmente lo ejecuto viendo el resultado:

Generando Native Image del ejemplo

Hasta ahora sólo he usado las capacidades políglotas de GraalVM para poder ejecutar Java y JS en el mismo ejemplo, pero nos queda probar la interesante funcionalidad de generar imágenes nativas.

Para eso ejecuto este comando: %GRAAL_HOME%binnative-image –language:js –initialize-at-build-time PrettyPrintJSON

(Con la sentencia language:js me aseguro de que el motor Javascript este disponible)

Los que usáis Windows, probablemente os encontraréis con este error:

Para solucionarlo tenéis que instalaros Microsoft Windows SDK for Windows 7 (https://www.microsoft.com/en-us/download/details.aspx?id=8442 )

como indican en esta página: https://happylynx.github.io/2019/04/30/graalvm-native-image-on-windows.html

Si tenéis arquitectura x64 necesitaréis este: http://download.microsoft.com/download/F/1/0/F10113F5-B750-4969-A255-274341AC6BCE/GRMSDKX_EN_DVD.iso

A la hora de instalarlo basta con marcar estas opciones:

Una vez instalado puedo volver a ejecutar el comando, pero debo hacerlo desde la línea de comandos del Windows SDK:

El proceso de generación de la imagen nativa tarda un rato y requiere bastante memoria:

Ahora ya tengo mi imagen nativa:

Y puedo ejecutar la aplicación:

Comparando tiempos entre aplicación JVM a Imagen Nativa

Y puedo comparar los tiempos.

En Linux podéis usar el comando time (y en Windows descargaros esta pequeña utilidad ptime: http://www.pc-tools.net/win32/ptime/)

Conclusiones

Como podéis ver los tiempos de arranque y de ejecución de la imagen nativa son mucho menores que los de la JVM, lo que hace muy adecuado esto para algunos escenarios, eso sí es importante tener en cuenta las consideraciones que el propio equipo de GraalVM da:

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s