GraalVM e programmi nativi Java



INTRODUZIONE

Per il mondo IT, Java e la sua JVM è stata una vera e propria rivoluzione. La possibilità di poter eseguire lo stesso codice in più architetture era un sogno che grazie alla JVM è divenuto realtà.

Ma come spesso accade non è tutto oro quel che luccica, infatti Java tra le altre cose ha avuto sempre un problema circa l'utilizzo delle risorse. Il più delle volte è stato troppo oneroso al pari di programmi nativi.

Negli anni, e fino alla versione 6 della JDK, GJC è stata un ottima scelta per creare codice nativo al pari del codice C

Purtroppo è stato deciso di abbandonare il progetto, la versione 6 è stata l'ultima supportata.

Nel panorama odierno ci sono pochissime scelte, una tra queste è Excelsior Jet che però è a pagamento.



GRAALVM


GraalVM è un prodotto Oracle che è in grado di creare eseguibili nativi partendo da un JAR (o una classe). Inoltre si candida come VM (Virtual Machine) unica per poter eseguire codice scritto in:

  • Java
  • Python
  • C
  • Scala
  • Ruby
  • R
  • Javascript / Node JS

COMPILARE ESEGUIBILI NATIVI CON GRAALVM

Di seguito un semplice esempio di utilizzo. Traduceremo il primo nostro Hello World da java a codice nativo!

  1. Installare GraalVM secondo le istruzioni ufficiali
  2. Effettuare il clone di questo progetto github
  3. Compilare il codice java 
    • javac HelloWorld.java
  4. Eseguire il comando di GraalVM
    • native-image HelloWorld
  5. Finito!!!



CONCLUSIONI

Naturalmente l'esempio HelloWorld è sempre bugiardo... Volevo inserire in questo posto la traduzione di progetto molto complesso: il daemon principale di IOTA

Purtroppo ho ancora qualche problema con il build del progetto perchè una libreria (RockDB) fa riferimento a degli shared object (.so) che non riesco proprio a fargli digerire.

Per completezza di seguito trovate il comando per lanciare la compilazione di IRI

native-image -H:+JNI \
 -Djava.library.path=/home/fabry/iri-native/clibraries \
 --report-unsupported-elements-at-runtime \ 
 --rerun-class-initialization-at-runtime=zmq.util.Utils,com.iota.iri.network.Node \
 --delay-class-initialization-to-runtime=org.rocksdb.RocksObject \
 -jar iri-1.5.5.jar

Vi farò sapere chi vincerà questa sfida!

Alla prossima

Commenti

Post popolari in questo blog

Hadoop, how to create a single node cluster using docker

How to install IOTA node with docker

Apache Spark - Try it using docker!