SlideShare una empresa de Scribd logo
1 de 64
HOW AND WHY GRAALVM
IS QUICKLY BECOMING
RELEVANT FOR YOU
Adnan Drina, Solution Architect, AMIS | Conclusion
Lucas Jellema, Solution Architect, AMIS | Conclusion#jfall
GitHub source repo: http://bit.ly/jfall2019-graalvm
DEMO
#jfall
JFall 2019 - HOW AND WHY GRAALVM
Overview
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Custom DSL
What is GraalVM?
JFall 2019 - HOW AND WHY GRAALVM
#jfall
What is GraalVM?
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Oh boy, we will be in so much trouble…
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Introducing
• JIT Compiler for running Java applications faster (matching native languages for
speed)
• Embeddable on Hotspot VM or other JVMs
• Polyglot VM – for running applications in any language
• JavaScript, Ruby, R, Python, C/C++
• Ahead-of-Time compiler for creating native binaries
• Simple, lean runtime with fast startup and minimal memory and process
footprint
• Interoperability platform that allows applications in one technology to interact
with with modules in other technologies (“Nashorn on super steroids”)
• Framework for compiling, running, interoperating and natively compiling
applications written in your own DSL
• Set of cross-language programming tools
JFall 2019 - HOW AND WHY GRAALVM
#jfall
What is GraalVM?
#jfall
JFall 2019 - HOW AND WHY GRAALVM
Native
Image
Custom
DSL
Polyglot
Tools
2017
Some history on GraalVM
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Project spun off from
Maxine VM
2012
Proof of Concept: a compiler written in Java (with all its
software engineering advantages) could generate highly
optimized code without compromising on compile times
Twitter started to run its
many Scala applications
on the GraalVM JIT
Compiler to save money
and CPU cycles 2019
Dutch National Police adopted GraalVM
and FastR for Scala  R Data Science
projects (as presented on JFall 2019)
GraalVM:
Two Editions
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Today, we will focus on
• JIT Compiler for running Java applications faster (matching native languages)
• on Hotspot VM or other traditional VMs
• Polyglot VM – for running applications in any language
• JavaScript, Ruby, R, Python, C/C++
• Ahead-of-Time compiler for creating native binaries
• Simple, lean runtime with fast startup and minimal memory and process
footprint
• Interoperability platform that allows applications in one technology to interact
with with modules in other technologies (“Nashorn on super steroids”)
• Framework for compiling, running, interoperating and natively compiling applications
written in your own DSL
• Set of cross-language programming tools
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GraalVM:
Ahead-of-Time compiler
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GraalVM compile modes
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GraalVM compile modes
JFall 2019 - HOW AND WHY GRAALVM
#jfall
JIT
java MyMainClass
GraalVM compile modes
JFall 2019 - HOW AND WHY GRAALVM
#jfall
JIT
java MyMainClass
AOT
native-image MyMainClass
./mymainclass
Ahead-of-Time Compilation
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Application
Substrate VM
JDK
Libraries
All Java classes from
your application, JDK
and Substrate VM
Points-
to analysis
Run
initializations
Heap
snapshotting
Iterative analysis on all
reachable methods,
fields and classes
Machine Code
Image Heap
Native executable
Application running without
dependency on JDK
Input Analysis Output
Native Image Limitations
JFall 2019 - HOW AND WHY GRAALVM
#jfall
JFall 2019 - HOW AND WHY GRAALVM
#jfall
AOT vs JIT
Frameworks adopting native image
JFall 2019 - HOW AND WHY GRAALVM
#jfall Helidon SE (Oracle)
A set of Java Libraries for writing microservices
Micronaut
JVM-based framework for building light-weight
modular applications (microservices)
Quarkus (Red Hat)
Kubernetes-native Java framework tailored for
GraalVM and Hotspot
AOT vs JIT: Startup Time
JFall 2019 - HOW AND WHY GRAALVM
#jfall
JIT
• Load JVM executable
• Load the classes from the file system
• Verify bytecode
• Start interpreting
• Run static initializers
• First tier compilation (C1)
• Gather profiling feedback
• Second tier compilation (GraalVM or C2)
• Finally run with best machine code
AOT
• Load executable with prepared heap
• Immediately start with best machine code
AOT vs JIT: Startup Time
JFall 2019 - HOW AND WHY GRAALVM
#jfall
JFall 2019 - HOW AND WHY GRAALVM
#jfall
AOT vs JIT: Memory Footprint
JIT
• Loaded JVM executable
• Application data
• Loaded bytecodes
• Reflection meta-data
• Code cache
• Profiling data
• JIT compiler data structures
AOT
• Loaded application executable
• Application data
JFall 2019 - HOW AND WHY GRAALVM
#jfall
AOT vs JIT: Memory Footprint
DEMO
#jfall
JFall 2019 - HOW AND WHY GRAALVM
Polyglot Platform with Language
Interoperability
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Why do we have so many languages?
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Polyglots – speak and understand many languages
JFall 2019 - HOW AND WHY GRAALVM
#jfall
• GraalVM can run (on the mature, manageable, observable and run time optimized JVM)
• Java
• JVM Languages
• Many other languages
• Through Truffle produced intermediate code
• Including Static Languages through Sulong- an LLVM IR interpreter
GraalVM Polyglot Runtime
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Fortran
Haskell
Truffle
Your own
Custom DSL
Polyglot Interoperability
• Establish frictionless interaction between language contexts
• To benefit from the best of all worlds
• Call out to ‘other world’ in a native way
• Receive response in interpretable format
• Minimal hoops to jump through at design time
• Minimal performance overhead at run time
• Uncomplicated run time environment
• Despite multiple runtime execution languages
• Basically: polyglot with the ease of mono-glot
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Current interoperability on JVM
• Current interoperability options from Java:
• file or queue based interaction
• REST API
• native interfaces (such as Java JNI and JNA)
• JSR-223 Interoperability - for example Nashorn (and support
for many other scripting languages);
• intra-JVM, Java Byte code level interop between
Java/Groovy/Kotlin/JRuby/Jython
• Less than perfect: complex, suboptimal performance,
technical limitations, variations in approach,
complex runtime environments, complex testing
JFall 2019 - HOW AND WHY GRAALVM
#jfall
All languages are used to express and communicate
very similar concepts
#jfall
Meta Language
(concepts, grammar,
structure)
JFall 2019 - HOW AND WHY GRAALVM
All programming languages are used to express and
execute very similar concepts
#jfall
Abstract Syntax Tree
(variables, loops, conditions,
calls, arithmetic)
JFall 2019 - HOW AND WHY GRAALVM
GraalVM can merge and run Java Byte code
derived from various origins
• GraalVM provides generic objects
in all supported languages to make
Polyglot call-outs, evaluate embedded
foreign code and share data across
language contexts
• Thus enabling interoperability
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GraalVM
Polyglot
Fortran
Haskell
The New Beast between Java and JavaScript
• Out go Rhino and Nashorn
• In comes GraalVM
JFall 2019 - HOW AND WHY GRAALVM
#jfall
From Java to JavaScript
• Evaluate JS snippets
• Load and call JavaScript sources
• Exchange data and objects back and forth
• Allow JavaScript to callback to Java objects
• Run multiple JavaScript threads in parallel
• Note: what applies to JavaScript by and large applies to all languages
that can run on GraalVM through Truffle
• Including Python, R, Ruby, LLVM (C/C++, Rust, Swift,…)
• Your own DSL
JFall 2019 - HOW AND WHY GRAALVM
#jfall
From Java to JavaScript
Evaluate a Simple Code Snippet
JFall 2019 - HOW AND WHY GRAALVM
#jfall
JFall 2019 - HOW AND WHY GRAALVM
Create Polyglot
context
Evaluate
Snippet
Evaluate Snippet =>
instantiate function
Execute function
Handle Exception
from JS
Bindings interface between Java  JavaScript
• Bindings for sharing data objects and executable functions between
the two language contexts
JFall 2019 - HOW AND WHY GRAALVM
#jfall
function put/call
variable
put/manipulate
invoke
read/write
Object
put/manipulate read/write
Object
put/manipulate/call invoke (method on)
Bindings
JS Context
Bindings interface between Java  JavaScript
Example: JavaScript constant, read from Java
JFall 2019 - HOW AND WHY GRAALVM
#jfall
PI
Bindings
writeread
Bindings interface between Java  JavaScript
Example: Java Map accessed from two sides
JFall 2019 - HOW AND WHY GRAALVM
#jfall
hostObject
<Map>
put/manipulate read
Bindings
myKey
myQuestion
yourAnswer
writeread
Call Back to Java from JavaScript
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Bindings
put
friend <class
Friendly
Neighbour>
invoke
eval
A Typical Java Challenge
(aided by JavaScript interaction)
• Developing a Java application
• I need to perform validations on input data
• Postal Code (various countries), Mobile Phone Numbers (many
countries), Email Address, Credit Card Number etc.
• NPM Module Validator offers
most of these OOTB
• But… it is written in JavaScript
• How does that help me?
JFall 2019 - HOW AND WHY GRAALVM
#jfall
A Typical Java Challenge
• Developing a Java application
• I need to perform validations on input data
• Postal Code (various countries), Mobile Phone Numbers (many
countries), Email Address, Credit Card Number etc.
• In Pseudo Code:
•
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Community package in JavaScript for dozens of
predefined validations
JFall 2019 - HOW AND WHY GRAALVM
#jfall
JavaScript Validator Module is compatible with GraalJS
JFall 2019 - HOW AND WHY GRAALVM
#jfall
A Typical Java Challenge – Resolved (with GraalVM)
• Embrace GraalVM as the Java runtime
• Install npm cli
• Install npm module validator
• After checking it is compatible
• Install and use webpack
to create a single bundle for module validator
• Extend Java application
• Import GraalVM Polyglot package
• Create JavaScript Context
• Load validator_bundled.js into context
• Get desired JS functions from bindings map
• Execute required JS functions
• as if they were Java methods
JFall 2019 - HOW AND WHY GRAALVM
#jfall
A Typical Java Challenge – Resolved (with GraalVM)
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Polyglot and Ahead of Time Compiled Native Binary
• A multi-lingual or polyglot Java application can be turned into a Native Binary
Executable using GraalVM Ahead of Time compilation
• Non JVM-languages can be included but are not compiled ahead of time
• The build process for the binary executable takes long & uses a lot of memory
• The outcome: a single, smal[lish] file running on plain Linux
with fast startup & low memory footprint
• For example in Alpine Linux Container or in Linux Binary Serverless Function
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GraalVM
Polyglot
Fortran
Haskell
GraalVM
Native Image
(binary executable)
application
Native Binary Executable for Java Polyglot application
• A Java application that executes snippets
of embedded, inline code in R, Python and JS
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GraalVM
Polyglot
$GRAALVM_HOME/bin/native-image -cp ./application-bundle.jar
--language:js --language:python --language:R
--verbose
-H:Name=myPolyglotApplication
-H:Class=nl.amis.AppStarter
Binary Executable
myPolyglotApplication
Native Binary Executable for Java Polyglot application
• Creating a binary image for
a Java application that calls JavaScript
and leverages an NPM module
that is loaded from an external file at run time:
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Polyglot
$GRAALVM_HOME/bin/native-image -cp ./application-bundle.jar
--language:js -H:Name=postalCodeValidator
-H:Class=nl.amis.java2js.ValidateThroughNPMValidator
-H:+ReportUnsupportedElementsAtRuntime
--allow-incomplete-classpath
validatorbundled.js
Binary Executable
postalCodeValidator
validatorbundled.js
./postalCodeValidator ~/my-graal/validatorbundled.js
When running the binary executable – pass the absolute
location of the JavaScript module as argument and read
the resource from that absolute path
Native Binary Executable for Java Polyglot application
• Timing comparison between Native Binary Executable and JIT execution:
• User time 0.08 seconds vs 4.99 seconds mainly startup time.
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Binary Executable
postalCodeValidator
validatorbundled.js
Binary
Executable
JIT
Compilation
Polyglot from non-JVM languages
• Any language running on GraalVM
can participate in Polyglot interoperability
• Evaluate & Execute Snippets in other languages
• Export data and objects through the Polyglot Map
to other execution contexts
• Import data and objects from
the Polyglot Map from other
language contexts
• Read, write & execute
• Interacting with JVM based
languages is slightly different
• Use Java Type to construct native
object based on a Java Class
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GraalVM
Polyglot
Fortran
Haskell
Polyglot from non-JVM languages
JFall 2019 Show Case: Scala  (Fast)R on GraalVM
• -
JFall 2019 - HOW AND WHY GRAALVM
#jfall GraalVM
Polyglot
Polyglot from JavaScript to Graal Truffle Languages
• Polyglot.eval can execute any language snippet
• It returns data objects (to read/write) or functions (that can be executed)
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GraalVM
Polyglot
Node Application calling out to Java (and others)
• GraalVM can run Node & JS applications
• GraalJS /GraalVM can replace V8 as interpreter & execution engine
• GraalJS runs Java Byte code on JVM
• This engine is a Java application that works on any Java 8+
implementation
• Can run faster and better scalable to big memory structures
• However: it may need some warmup time to reach peak performance
• GraalVM 19.2.1: based on Node 10.16.3 and ECMAScript 2019 compliant
• Node application running with GraalVM can leverage GraalVMs Polyglot –
with Java as well as other languages (R, Ruby, Python, C++, …)
• Evaluate Code Snippets, Instantiate Objects, Share Data
JFall 2019 - HOW AND WHY GRAALVM
#jfall
application-bundle.jar
Node Application
Node Application calling out to Java
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Joker.class
GraalJS
JVM & GraalVM
Java 8 APIs
application-bundle.jar
Node Application
Node Application calling out to Java
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Joker.class
Get hold of Java Class and
instantiate Java Object
Invoke method on Object
and get String returned
application-bundle.jar
Node Application
Node Application calling out to Java (and JavaScript)
JFall 2019 - HOW AND WHY GRAALVM
#jfall
validator-
bundle.js
Leverages NPM
Validator module
Conclusion
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Quick Recap – What is GraalVM?
• Thomas Wuerthinger: “a new virtual machine that is trying to execute
many languages faster”
• JIT Foundation for the Long Term Evolution of HotSpot JVM
• Stable, observable, manageable and maintainable JVM with
optimizations for modern Java and JVM language patterns
• Serverless Java
• Small footprint, rapid startup time, simple & small run time
• Interoperability platform aka Polyglot VM
• Run and interact between many languages
• Bonus features
• Custom DSL
• Native interaction between C/C++ and Java
• Polyglot Tools: Debugger (with Chrome Dev Tools),
Profiler, GraalVM VisualVM, Ideal Graph Visualizer,
Visual Studio Code extension for GraalVM
JFall 2019 - HOW AND WHY GRAALVM
#jfall
What’s Next?
• GraalVM 19.3 – 19th November 2019
• Java 11 support!
• GraalVM runtime and native binary for Serverless frameworks and FaaS
• Project Fn provides GraalVM support today, native image can run on many FaaS
• GraalVM further AOT support in many Java frameworks
• Spring 5.3 GraalVM Native Image support – 1H 2020 (Initial support since 5.1)
• Oracle Database has preview with Multi Language Engine for Stored Procedures in
Python, JavaScript and more
• Oracle WebLogic 14 plans to support GraalVM as its runtime
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Adopting GraalVM in your team - your first steps
• Start exploring GraalVM – download & install, play and do a PoC
• Plenty of resources available (code samples, blog articles, tutorials, ..)
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Adopting GraalVM in your team - your first steps
• Start exploring GraalVM – download & install, play and do a PoC
• Plenty of resources available (code samples, blog articles, tutorials, ..)
• Hybrid: have some containers running GraalVM (for Java applications)
instead of your traditional JVM brand
• to try out, check if it is stable and performant and (better) manageable
• Start leveraging polyglot
• single runtime for different programming languages)
• interoperability (benefit in Java from 3rd party libraries in JavaScript or Python [or
vice versa] and/or make better use of the skills in your team)
• better start creating standards and guidelines around when and how to polyglot!
• AOT/native - use GraalVM to build Java applications as native executables as last step
in the build process and deliver that executable instead of JAR files
• create Java based Serverless Functions with small footprint and very quick startup
• benefit from ultra fast and super small frameworks (Quarkus, and yes, even Spring!)
JFall 2019 - HOW AND WHY GRAALVM
#jfall
Gra
alV
M
Pol
ygl
ot
Fortran
Haskell
Thank you!
JFall 2019 - HOW AND WHY GRAALVM
#jfall
GitHub source repo: http://bit.ly/jfall2019-graalvm
“Please rate our
talk in the
official J-Fall
app”
“Please rate our talk in the
official J-Fall app”
#jfall
JFall 2019 - HOW AND WHY GRAALVM
GitHub source repo: http://bit.ly/jfall2019-graalvm

Más contenido relacionado

La actualidad más candente

Discover Quarkus and GraalVM
Discover Quarkus and GraalVMDiscover Quarkus and GraalVM
Discover Quarkus and GraalVMRomain Schlick
 
Quarkus tips, tricks, and techniques
Quarkus tips, tricks, and techniquesQuarkus tips, tricks, and techniques
Quarkus tips, tricks, and techniquesRed Hat Developers
 
JCConf2019: Next Step of JavaScript on Java
JCConf2019: Next Step of JavaScript on JavaJCConf2019: Next Step of JavaScript on Java
JCConf2019: Next Step of JavaScript on JavaTakaaki Sugiyama
 
A visual introduction to Apache Kafka
A visual introduction to Apache KafkaA visual introduction to Apache Kafka
A visual introduction to Apache KafkaPaul Brebner
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11 Knoldus Inc.
 
Evening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in FlinkEvening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in FlinkFlink Forward
 
GraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevGraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevOracle Developers
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Michel Schudel
 
Flexible Authentication Strategies with SASL/OAUTHBEARER (Michael Kaminski, T...
Flexible Authentication Strategies with SASL/OAUTHBEARER (Michael Kaminski, T...Flexible Authentication Strategies with SASL/OAUTHBEARER (Michael Kaminski, T...
Flexible Authentication Strategies with SASL/OAUTHBEARER (Michael Kaminski, T...confluent
 
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...confluent
 
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Verv...
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Verv...Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Verv...
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Verv...Flink Forward
 
Understanding Reactive Programming
Understanding Reactive ProgrammingUnderstanding Reactive Programming
Understanding Reactive ProgrammingAndres Almiray
 
Terraform: Infrastructure as Code
Terraform: Infrastructure as CodeTerraform: Infrastructure as Code
Terraform: Infrastructure as CodePradeep Bhadani
 
Event Streaming with Kafka Streams and Spring Cloud Stream | Soby Chacko, VMware
Event Streaming with Kafka Streams and Spring Cloud Stream | Soby Chacko, VMwareEvent Streaming with Kafka Streams and Spring Cloud Stream | Soby Chacko, VMware
Event Streaming with Kafka Streams and Spring Cloud Stream | Soby Chacko, VMwareHostedbyConfluent
 

La actualidad más candente (20)

Discover Quarkus and GraalVM
Discover Quarkus and GraalVMDiscover Quarkus and GraalVM
Discover Quarkus and GraalVM
 
Quarkus k8s
Quarkus   k8sQuarkus   k8s
Quarkus k8s
 
Quarkus tips, tricks, and techniques
Quarkus tips, tricks, and techniquesQuarkus tips, tricks, and techniques
Quarkus tips, tricks, and techniques
 
Apache kafka
Apache kafkaApache kafka
Apache kafka
 
JCConf2019: Next Step of JavaScript on Java
JCConf2019: Next Step of JavaScript on JavaJCConf2019: Next Step of JavaScript on Java
JCConf2019: Next Step of JavaScript on Java
 
A visual introduction to Apache Kafka
A visual introduction to Apache KafkaA visual introduction to Apache Kafka
A visual introduction to Apache Kafka
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11
 
Evening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in FlinkEvening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in Flink
 
GraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajevGraalVM Native Images by Oleg Selajev @shelajev
GraalVM Native Images by Oleg Selajev @shelajev
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
 
GraalVm and Quarkus
GraalVm and QuarkusGraalVm and Quarkus
GraalVm and Quarkus
 
Flexible Authentication Strategies with SASL/OAUTHBEARER (Michael Kaminski, T...
Flexible Authentication Strategies with SASL/OAUTHBEARER (Michael Kaminski, T...Flexible Authentication Strategies with SASL/OAUTHBEARER (Michael Kaminski, T...
Flexible Authentication Strategies with SASL/OAUTHBEARER (Michael Kaminski, T...
 
Apache Kafka Security
Apache Kafka Security Apache Kafka Security
Apache Kafka Security
 
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
 
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Verv...
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Verv...Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Verv...
Towards Flink 2.0: Unified Batch & Stream Processing - Aljoscha Krettek, Verv...
 
Understanding Reactive Programming
Understanding Reactive ProgrammingUnderstanding Reactive Programming
Understanding Reactive Programming
 
Envoy and Kafka
Envoy and KafkaEnvoy and Kafka
Envoy and Kafka
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
Terraform: Infrastructure as Code
Terraform: Infrastructure as CodeTerraform: Infrastructure as Code
Terraform: Infrastructure as Code
 
Event Streaming with Kafka Streams and Spring Cloud Stream | Soby Chacko, VMware
Event Streaming with Kafka Streams and Spring Cloud Stream | Soby Chacko, VMwareEvent Streaming with Kafka Streams and Spring Cloud Stream | Soby Chacko, VMware
Event Streaming with Kafka Streams and Spring Cloud Stream | Soby Chacko, VMware
 

Similar a HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU

GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28Jorge Hidalgo
 
TechEvent Graal(VM) Performance Interoperability
TechEvent Graal(VM) Performance InteroperabilityTechEvent Graal(VM) Performance Interoperability
TechEvent Graal(VM) Performance InteroperabilityTrivadis
 
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVMHOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVMOwais Zahid
 
GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18Jorge Hidalgo
 
FOSDEM 2017 - Open J9 The Next Free Java VM
FOSDEM 2017 - Open J9 The Next Free Java VMFOSDEM 2017 - Open J9 The Next Free Java VM
FOSDEM 2017 - Open J9 The Next Free Java VMCharlie Gracie
 
GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22Jorge Hidalgo
 
How and why GraalVM is quickly becoming relevant for you (DOAG 2020)
How and why GraalVM is quickly becoming relevant for you (DOAG 2020)How and why GraalVM is quickly becoming relevant for you (DOAG 2020)
How and why GraalVM is quickly becoming relevant for you (DOAG 2020)Lucas Jellema
 
Simple tweaks to get the most out of your JVM
Simple tweaks to get the most out of your JVMSimple tweaks to get the most out of your JVM
Simple tweaks to get the most out of your JVMJamie Coleman
 
JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?Charlie Gracie
 
#JavaOne What's in an object?
#JavaOne What's in an object?#JavaOne What's in an object?
#JavaOne What's in an object?Charlie Gracie
 
Graal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution PlatformGraal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution PlatformThomas Wuerthinger
 
Simple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvmSimple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvmJamie Coleman
 
J9: Under the hood of the next open source JVM
J9: Under the hood of the next open source JVMJ9: Under the hood of the next open source JVM
J9: Under the hood of the next open source JVMDanHeidinga
 
Apache Big Data Europe 2016
Apache Big Data Europe 2016Apache Big Data Europe 2016
Apache Big Data Europe 2016Tim Ellison
 
Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVMRyan Cuprak
 
Polyglot Applications with GraalVM
Polyglot Applications with GraalVMPolyglot Applications with GraalVM
Polyglot Applications with GraalVMjexp
 
20191119 Cloud Native Java : GraalVM
20191119 Cloud Native Java : GraalVM20191119 Cloud Native Java : GraalVM
20191119 Cloud Native Java : GraalVMTaewan Kim
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal JavaPhilippe Riand
 
Under the Hood of the Testarossa JIT Compiler
Under the Hood of the Testarossa JIT CompilerUnder the Hood of the Testarossa JIT Compiler
Under the Hood of the Testarossa JIT CompilerMark Stoodley
 

Similar a HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU (20)

GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28
 
TechEvent Graal(VM) Performance Interoperability
TechEvent Graal(VM) Performance InteroperabilityTechEvent Graal(VM) Performance Interoperability
TechEvent Graal(VM) Performance Interoperability
 
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVMHOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
HOW TO CREATE AWESOME POLYGLOT APPLICATIONS USING GRAALVM
 
GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18
 
FOSDEM 2017 - Open J9 The Next Free Java VM
FOSDEM 2017 - Open J9 The Next Free Java VMFOSDEM 2017 - Open J9 The Next Free Java VM
FOSDEM 2017 - Open J9 The Next Free Java VM
 
GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22
 
How and why GraalVM is quickly becoming relevant for you (DOAG 2020)
How and why GraalVM is quickly becoming relevant for you (DOAG 2020)How and why GraalVM is quickly becoming relevant for you (DOAG 2020)
How and why GraalVM is quickly becoming relevant for you (DOAG 2020)
 
Simple tweaks to get the most out of your JVM
Simple tweaks to get the most out of your JVMSimple tweaks to get the most out of your JVM
Simple tweaks to get the most out of your JVM
 
JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?
 
#JavaOne What's in an object?
#JavaOne What's in an object?#JavaOne What's in an object?
#JavaOne What's in an object?
 
Graal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution PlatformGraal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution Platform
 
Simple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvmSimple tweaks to get the most out of your jvm
Simple tweaks to get the most out of your jvm
 
J9: Under the hood of the next open source JVM
J9: Under the hood of the next open source JVMJ9: Under the hood of the next open source JVM
J9: Under the hood of the next open source JVM
 
Apache Big Data Europe 2016
Apache Big Data Europe 2016Apache Big Data Europe 2016
Apache Big Data Europe 2016
 
Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVM
 
Polyglot Applications with GraalVM
Polyglot Applications with GraalVMPolyglot Applications with GraalVM
Polyglot Applications with GraalVM
 
20191119 Cloud Native Java : GraalVM
20191119 Cloud Native Java : GraalVM20191119 Cloud Native Java : GraalVM
20191119 Cloud Native Java : GraalVM
 
MWLUG - Universal Java
MWLUG  -  Universal JavaMWLUG  -  Universal Java
MWLUG - Universal Java
 
Javantura v4 - JVM++ The GraalVM - Martin Toshev
Javantura v4 - JVM++ The GraalVM - Martin ToshevJavantura v4 - JVM++ The GraalVM - Martin Toshev
Javantura v4 - JVM++ The GraalVM - Martin Toshev
 
Under the Hood of the Testarossa JIT Compiler
Under the Hood of the Testarossa JIT CompilerUnder the Hood of the Testarossa JIT Compiler
Under the Hood of the Testarossa JIT Compiler
 

Más de Lucas Jellema

Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Lucas Jellema
 
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Lucas Jellema
 
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lucas Jellema
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Lucas Jellema
 
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...Lucas Jellema
 
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...Lucas Jellema
 
Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Lucas Jellema
 
IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)Lucas Jellema
 
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Lucas Jellema
 
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Lucas Jellema
 
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Lucas Jellema
 
Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Lucas Jellema
 
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...Lucas Jellema
 
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...Lucas Jellema
 
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)Lucas Jellema
 
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...Lucas Jellema
 
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Lucas Jellema
 
Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Lucas Jellema
 
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Lucas Jellema
 
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Lucas Jellema
 

Más de Lucas Jellema (20)

Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...Introduction to web application development with Vue (for absolute beginners)...
Introduction to web application development with Vue (for absolute beginners)...
 
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
 
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...
 
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
 
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
 
Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!
 
IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)
 
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
 
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
 
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
 
Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...
 
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
 
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
 
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
 
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
 
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
 
Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)
 
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
 
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
 

Último

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 

Último (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 

HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU

  • 1. HOW AND WHY GRAALVM IS QUICKLY BECOMING RELEVANT FOR YOU Adnan Drina, Solution Architect, AMIS | Conclusion Lucas Jellema, Solution Architect, AMIS | Conclusion#jfall GitHub source repo: http://bit.ly/jfall2019-graalvm
  • 2. DEMO #jfall JFall 2019 - HOW AND WHY GRAALVM
  • 3. Overview JFall 2019 - HOW AND WHY GRAALVM #jfall Custom DSL
  • 4. What is GraalVM? JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 5. What is GraalVM? JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 6. Oh boy, we will be in so much trouble… JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 7. Introducing • JIT Compiler for running Java applications faster (matching native languages for speed) • Embeddable on Hotspot VM or other JVMs • Polyglot VM – for running applications in any language • JavaScript, Ruby, R, Python, C/C++ • Ahead-of-Time compiler for creating native binaries • Simple, lean runtime with fast startup and minimal memory and process footprint • Interoperability platform that allows applications in one technology to interact with with modules in other technologies (“Nashorn on super steroids”) • Framework for compiling, running, interoperating and natively compiling applications written in your own DSL • Set of cross-language programming tools JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 8. What is GraalVM? #jfall JFall 2019 - HOW AND WHY GRAALVM Native Image Custom DSL Polyglot Tools
  • 9. 2017 Some history on GraalVM JFall 2019 - HOW AND WHY GRAALVM #jfall Project spun off from Maxine VM 2012 Proof of Concept: a compiler written in Java (with all its software engineering advantages) could generate highly optimized code without compromising on compile times Twitter started to run its many Scala applications on the GraalVM JIT Compiler to save money and CPU cycles 2019 Dutch National Police adopted GraalVM and FastR for Scala  R Data Science projects (as presented on JFall 2019)
  • 10. GraalVM: Two Editions JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 11. Today, we will focus on • JIT Compiler for running Java applications faster (matching native languages) • on Hotspot VM or other traditional VMs • Polyglot VM – for running applications in any language • JavaScript, Ruby, R, Python, C/C++ • Ahead-of-Time compiler for creating native binaries • Simple, lean runtime with fast startup and minimal memory and process footprint • Interoperability platform that allows applications in one technology to interact with with modules in other technologies (“Nashorn on super steroids”) • Framework for compiling, running, interoperating and natively compiling applications written in your own DSL • Set of cross-language programming tools JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 12. GraalVM: Ahead-of-Time compiler JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 13. GraalVM compile modes JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 14. GraalVM compile modes JFall 2019 - HOW AND WHY GRAALVM #jfall JIT java MyMainClass
  • 15. GraalVM compile modes JFall 2019 - HOW AND WHY GRAALVM #jfall JIT java MyMainClass AOT native-image MyMainClass ./mymainclass
  • 16. Ahead-of-Time Compilation JFall 2019 - HOW AND WHY GRAALVM #jfall Application Substrate VM JDK Libraries All Java classes from your application, JDK and Substrate VM Points- to analysis Run initializations Heap snapshotting Iterative analysis on all reachable methods, fields and classes Machine Code Image Heap Native executable Application running without dependency on JDK Input Analysis Output
  • 17. Native Image Limitations JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 18. JFall 2019 - HOW AND WHY GRAALVM #jfall AOT vs JIT
  • 19. Frameworks adopting native image JFall 2019 - HOW AND WHY GRAALVM #jfall Helidon SE (Oracle) A set of Java Libraries for writing microservices Micronaut JVM-based framework for building light-weight modular applications (microservices) Quarkus (Red Hat) Kubernetes-native Java framework tailored for GraalVM and Hotspot
  • 20. AOT vs JIT: Startup Time JFall 2019 - HOW AND WHY GRAALVM #jfall JIT • Load JVM executable • Load the classes from the file system • Verify bytecode • Start interpreting • Run static initializers • First tier compilation (C1) • Gather profiling feedback • Second tier compilation (GraalVM or C2) • Finally run with best machine code AOT • Load executable with prepared heap • Immediately start with best machine code
  • 21. AOT vs JIT: Startup Time JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 22. JFall 2019 - HOW AND WHY GRAALVM #jfall AOT vs JIT: Memory Footprint JIT • Loaded JVM executable • Application data • Loaded bytecodes • Reflection meta-data • Code cache • Profiling data • JIT compiler data structures AOT • Loaded application executable • Application data
  • 23. JFall 2019 - HOW AND WHY GRAALVM #jfall AOT vs JIT: Memory Footprint
  • 24. DEMO #jfall JFall 2019 - HOW AND WHY GRAALVM
  • 25. Polyglot Platform with Language Interoperability JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 26. Why do we have so many languages? JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 27. Polyglots – speak and understand many languages JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 28. • GraalVM can run (on the mature, manageable, observable and run time optimized JVM) • Java • JVM Languages • Many other languages • Through Truffle produced intermediate code • Including Static Languages through Sulong- an LLVM IR interpreter GraalVM Polyglot Runtime JFall 2019 - HOW AND WHY GRAALVM #jfall Fortran Haskell Truffle Your own Custom DSL
  • 29. Polyglot Interoperability • Establish frictionless interaction between language contexts • To benefit from the best of all worlds • Call out to ‘other world’ in a native way • Receive response in interpretable format • Minimal hoops to jump through at design time • Minimal performance overhead at run time • Uncomplicated run time environment • Despite multiple runtime execution languages • Basically: polyglot with the ease of mono-glot JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 30. Current interoperability on JVM • Current interoperability options from Java: • file or queue based interaction • REST API • native interfaces (such as Java JNI and JNA) • JSR-223 Interoperability - for example Nashorn (and support for many other scripting languages); • intra-JVM, Java Byte code level interop between Java/Groovy/Kotlin/JRuby/Jython • Less than perfect: complex, suboptimal performance, technical limitations, variations in approach, complex runtime environments, complex testing JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 31. All languages are used to express and communicate very similar concepts #jfall Meta Language (concepts, grammar, structure) JFall 2019 - HOW AND WHY GRAALVM
  • 32. All programming languages are used to express and execute very similar concepts #jfall Abstract Syntax Tree (variables, loops, conditions, calls, arithmetic) JFall 2019 - HOW AND WHY GRAALVM
  • 33. GraalVM can merge and run Java Byte code derived from various origins • GraalVM provides generic objects in all supported languages to make Polyglot call-outs, evaluate embedded foreign code and share data across language contexts • Thus enabling interoperability JFall 2019 - HOW AND WHY GRAALVM #jfall GraalVM Polyglot Fortran Haskell
  • 34. The New Beast between Java and JavaScript • Out go Rhino and Nashorn • In comes GraalVM JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 35. From Java to JavaScript • Evaluate JS snippets • Load and call JavaScript sources • Exchange data and objects back and forth • Allow JavaScript to callback to Java objects • Run multiple JavaScript threads in parallel • Note: what applies to JavaScript by and large applies to all languages that can run on GraalVM through Truffle • Including Python, R, Ruby, LLVM (C/C++, Rust, Swift,…) • Your own DSL JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 36. From Java to JavaScript Evaluate a Simple Code Snippet JFall 2019 - HOW AND WHY GRAALVM #jfall JFall 2019 - HOW AND WHY GRAALVM Create Polyglot context Evaluate Snippet Evaluate Snippet => instantiate function Execute function Handle Exception from JS
  • 37. Bindings interface between Java  JavaScript • Bindings for sharing data objects and executable functions between the two language contexts JFall 2019 - HOW AND WHY GRAALVM #jfall function put/call variable put/manipulate invoke read/write Object put/manipulate read/write Object put/manipulate/call invoke (method on) Bindings JS Context
  • 38. Bindings interface between Java  JavaScript Example: JavaScript constant, read from Java JFall 2019 - HOW AND WHY GRAALVM #jfall PI Bindings writeread
  • 39. Bindings interface between Java  JavaScript Example: Java Map accessed from two sides JFall 2019 - HOW AND WHY GRAALVM #jfall hostObject <Map> put/manipulate read Bindings myKey myQuestion yourAnswer writeread
  • 40. Call Back to Java from JavaScript JFall 2019 - HOW AND WHY GRAALVM #jfall Bindings put friend <class Friendly Neighbour> invoke eval
  • 41. A Typical Java Challenge (aided by JavaScript interaction) • Developing a Java application • I need to perform validations on input data • Postal Code (various countries), Mobile Phone Numbers (many countries), Email Address, Credit Card Number etc. • NPM Module Validator offers most of these OOTB • But… it is written in JavaScript • How does that help me? JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 42. A Typical Java Challenge • Developing a Java application • I need to perform validations on input data • Postal Code (various countries), Mobile Phone Numbers (many countries), Email Address, Credit Card Number etc. • In Pseudo Code: • JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 43. Community package in JavaScript for dozens of predefined validations JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 44. JavaScript Validator Module is compatible with GraalJS JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 45. A Typical Java Challenge – Resolved (with GraalVM) • Embrace GraalVM as the Java runtime • Install npm cli • Install npm module validator • After checking it is compatible • Install and use webpack to create a single bundle for module validator • Extend Java application • Import GraalVM Polyglot package • Create JavaScript Context • Load validator_bundled.js into context • Get desired JS functions from bindings map • Execute required JS functions • as if they were Java methods JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 46. A Typical Java Challenge – Resolved (with GraalVM) JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 47. Polyglot and Ahead of Time Compiled Native Binary • A multi-lingual or polyglot Java application can be turned into a Native Binary Executable using GraalVM Ahead of Time compilation • Non JVM-languages can be included but are not compiled ahead of time • The build process for the binary executable takes long & uses a lot of memory • The outcome: a single, smal[lish] file running on plain Linux with fast startup & low memory footprint • For example in Alpine Linux Container or in Linux Binary Serverless Function JFall 2019 - HOW AND WHY GRAALVM #jfall GraalVM Polyglot Fortran Haskell GraalVM Native Image (binary executable) application
  • 48. Native Binary Executable for Java Polyglot application • A Java application that executes snippets of embedded, inline code in R, Python and JS JFall 2019 - HOW AND WHY GRAALVM #jfall GraalVM Polyglot $GRAALVM_HOME/bin/native-image -cp ./application-bundle.jar --language:js --language:python --language:R --verbose -H:Name=myPolyglotApplication -H:Class=nl.amis.AppStarter Binary Executable myPolyglotApplication
  • 49. Native Binary Executable for Java Polyglot application • Creating a binary image for a Java application that calls JavaScript and leverages an NPM module that is loaded from an external file at run time: JFall 2019 - HOW AND WHY GRAALVM #jfall Polyglot $GRAALVM_HOME/bin/native-image -cp ./application-bundle.jar --language:js -H:Name=postalCodeValidator -H:Class=nl.amis.java2js.ValidateThroughNPMValidator -H:+ReportUnsupportedElementsAtRuntime --allow-incomplete-classpath validatorbundled.js Binary Executable postalCodeValidator validatorbundled.js ./postalCodeValidator ~/my-graal/validatorbundled.js When running the binary executable – pass the absolute location of the JavaScript module as argument and read the resource from that absolute path
  • 50. Native Binary Executable for Java Polyglot application • Timing comparison between Native Binary Executable and JIT execution: • User time 0.08 seconds vs 4.99 seconds mainly startup time. JFall 2019 - HOW AND WHY GRAALVM #jfall Binary Executable postalCodeValidator validatorbundled.js Binary Executable JIT Compilation
  • 51. Polyglot from non-JVM languages • Any language running on GraalVM can participate in Polyglot interoperability • Evaluate & Execute Snippets in other languages • Export data and objects through the Polyglot Map to other execution contexts • Import data and objects from the Polyglot Map from other language contexts • Read, write & execute • Interacting with JVM based languages is slightly different • Use Java Type to construct native object based on a Java Class JFall 2019 - HOW AND WHY GRAALVM #jfall GraalVM Polyglot Fortran Haskell
  • 52. Polyglot from non-JVM languages JFall 2019 Show Case: Scala  (Fast)R on GraalVM • - JFall 2019 - HOW AND WHY GRAALVM #jfall GraalVM Polyglot
  • 53. Polyglot from JavaScript to Graal Truffle Languages • Polyglot.eval can execute any language snippet • It returns data objects (to read/write) or functions (that can be executed) JFall 2019 - HOW AND WHY GRAALVM #jfall GraalVM Polyglot
  • 54. Node Application calling out to Java (and others) • GraalVM can run Node & JS applications • GraalJS /GraalVM can replace V8 as interpreter & execution engine • GraalJS runs Java Byte code on JVM • This engine is a Java application that works on any Java 8+ implementation • Can run faster and better scalable to big memory structures • However: it may need some warmup time to reach peak performance • GraalVM 19.2.1: based on Node 10.16.3 and ECMAScript 2019 compliant • Node application running with GraalVM can leverage GraalVMs Polyglot – with Java as well as other languages (R, Ruby, Python, C++, …) • Evaluate Code Snippets, Instantiate Objects, Share Data JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 55. application-bundle.jar Node Application Node Application calling out to Java JFall 2019 - HOW AND WHY GRAALVM #jfall Joker.class GraalJS JVM & GraalVM Java 8 APIs
  • 56. application-bundle.jar Node Application Node Application calling out to Java JFall 2019 - HOW AND WHY GRAALVM #jfall Joker.class Get hold of Java Class and instantiate Java Object Invoke method on Object and get String returned
  • 57. application-bundle.jar Node Application Node Application calling out to Java (and JavaScript) JFall 2019 - HOW AND WHY GRAALVM #jfall validator- bundle.js Leverages NPM Validator module
  • 58. Conclusion JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 59. Quick Recap – What is GraalVM? • Thomas Wuerthinger: “a new virtual machine that is trying to execute many languages faster” • JIT Foundation for the Long Term Evolution of HotSpot JVM • Stable, observable, manageable and maintainable JVM with optimizations for modern Java and JVM language patterns • Serverless Java • Small footprint, rapid startup time, simple & small run time • Interoperability platform aka Polyglot VM • Run and interact between many languages • Bonus features • Custom DSL • Native interaction between C/C++ and Java • Polyglot Tools: Debugger (with Chrome Dev Tools), Profiler, GraalVM VisualVM, Ideal Graph Visualizer, Visual Studio Code extension for GraalVM JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 60. What’s Next? • GraalVM 19.3 – 19th November 2019 • Java 11 support! • GraalVM runtime and native binary for Serverless frameworks and FaaS • Project Fn provides GraalVM support today, native image can run on many FaaS • GraalVM further AOT support in many Java frameworks • Spring 5.3 GraalVM Native Image support – 1H 2020 (Initial support since 5.1) • Oracle Database has preview with Multi Language Engine for Stored Procedures in Python, JavaScript and more • Oracle WebLogic 14 plans to support GraalVM as its runtime JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 61. Adopting GraalVM in your team - your first steps • Start exploring GraalVM – download & install, play and do a PoC • Plenty of resources available (code samples, blog articles, tutorials, ..) JFall 2019 - HOW AND WHY GRAALVM #jfall
  • 62. Adopting GraalVM in your team - your first steps • Start exploring GraalVM – download & install, play and do a PoC • Plenty of resources available (code samples, blog articles, tutorials, ..) • Hybrid: have some containers running GraalVM (for Java applications) instead of your traditional JVM brand • to try out, check if it is stable and performant and (better) manageable • Start leveraging polyglot • single runtime for different programming languages) • interoperability (benefit in Java from 3rd party libraries in JavaScript or Python [or vice versa] and/or make better use of the skills in your team) • better start creating standards and guidelines around when and how to polyglot! • AOT/native - use GraalVM to build Java applications as native executables as last step in the build process and deliver that executable instead of JAR files • create Java based Serverless Functions with small footprint and very quick startup • benefit from ultra fast and super small frameworks (Quarkus, and yes, even Spring!) JFall 2019 - HOW AND WHY GRAALVM #jfall Gra alV M Pol ygl ot Fortran Haskell
  • 63. Thank you! JFall 2019 - HOW AND WHY GRAALVM #jfall GitHub source repo: http://bit.ly/jfall2019-graalvm “Please rate our talk in the official J-Fall app”
  • 64. “Please rate our talk in the official J-Fall app” #jfall JFall 2019 - HOW AND WHY GRAALVM GitHub source repo: http://bit.ly/jfall2019-graalvm

Notas del editor

  1. First slide
  2. Start with Demo - quickly create some excitement about what GraalVM adds in terms of very tangible benefits Fast execution run a Java application in the normal way - show timing run the same Java application as AOT-compiled native application - show timing conclude that the application starts/runs /completes much faster - and has a smaller footprint (memory, disk) as well; no full blown JVM but light weight runtime (and show for example container sizes – container with traditional runtime and container with native binary)
  3. Overview of main themes and topics (instead of boring list of all topics in the agenda) We can make this slide build – to indicate the order of the topics High-performance modern Java Low-footprint, fast-startup Java Combine JavaScript, Java, Ruby, and R
  4. Spaghetti… Hotspot C2 compiler for runtime optimizations had gotten very complicated and very hard to maintain. It does not support optimization for modern code patterns. The C++ code had gotten out of hand
  5. Spaghetti… Hotspot C2 compiler for runtime optimizations had gotten very complicated and very hard to maintain. It does not support optimization for modern code patterns. The C++ code had gotten out of hand
  6. Spaghetti… Hotspot C2 compiler for runtime optimizations had gotten very complicated and very hard to maintain. It does not support optimization for modern code patterns. The C++ code had gotten out of hand
  7. https://en.wikipedia.org/wiki/GraalVM
  8. https://openjdk.java.net/projects/graal/
  9. Spaghetti… Hotspot C2 compiler for runtime optimizations had gotten very complicated and very hard to maintain. It does not support optimization for modern code patterns. The C++ code had gotten out of hand
  10. At this part of our presentation, we will focus on JVM-based languages and try to explain the difference between 2 compilation modes provided by GraalVM.
  11. Let's start with (JIT) Just in Time compiler. This is the default way of compiling JVM based applications. JVM is a run-time environment that interprets Java application into Java bytecode and then uses something called a (JIT) just-in-time compiler which compiles the Java bytecode into native machine code while you are running your application. This means that a Java application gets more optimized and faster while running and this is also the reason why Java gets as fast as it is and how it can run some code faster than C++ Java HotSpot VM has two JIT compilers. C1 also called the client compiler. C1 create your first machine code. You do that because there's such a big difference between the interpreter speed and the final machine code speed. So, you need an intermediate solution. This intermediate solution is provided by the C1 client compiler, and this intermediate solution has something in there that gathers profiling feedback, information about how the application is running the code. Then, when a method gets really hot, meaning method is executed around 10.000 times, then the method is scheduled for the second compiler, and this is when the heavyweight compiler, C2 compiler, comes in and uses all the information gathered during the startup sequence of the application to create the final, very optimized machine code and then you execute faster. These HotSpot compilers exist for a while and optimized for certain workloads but the way how we program has changed over time. How we use today JVM is very different from what we did 20 years ago. Today we run on JVM other languages like Groovy and Scala. So there are different constructs that are reaching JIT compiler and some of the optimization phases that have been originally placed in compilers are not taking into account the complexity of those new constructs. So, when focusing on modern programs running on top of JVM we could do a better job by writing a new optimization phase for this new type of program. In this context, GraalVM replaces HotSpot's C2 compiler. GraalVM is designed for optimization of modern code shapes, such as Scala or Kotlin but also for modern types of Java code, for example, if you use latest stream API expressions or even lambdas. Only production implementation of GraalVM is in this domain, by Twitter. Where Twitter is using GraalVM to compile Scala code. Enabling their microservices to use less memory with improvements in garbage collection. Less CPU spent on GC.
  12. But let's look at a different compilation mode, which is unique to GraalVM and that is (AOT) Ahead of Time compilation. GraalVM has a way that takes a JVM based application and then does so-called Closed World Analysis, where it figures out all the code that is reachable from the application entry point and triggers Ahead of Time compiler which creates machine code, a binary that can run by its own with no need for JVM to be present! Also known as Java native image. You can also statically link system library, with --static flag when you are creating native binary and in that case, you can run that native binary on bear metal docker image. So, you don't even need a Linux distribution or anything like that when you run on Docker.
  13. So let's see what is all happening in this Ahead of Time compiler in order to produce a native image. At first step as input, GraalVM is taking everything that is consumed by the Java application, meaning the libraries, the JDK libraries, also resource like SubstrateVM, and what it does is a Closed World Analysis. Closed World Analysis is an analysis of all reachable methods, fields and classes from the main class of the application. Because when you create this package binary, you don't want to include every JDK class there is, you don't want to include every library class there is. You want to package only what is used by your application, so Graal does a point-to analysis of what is reachable from the entry point of the application. Graal runs some of the static initializers and creates heap snapshots. Then, we put everything together in a single binary. We put all the code AOT compiled code into the machine code section, and we write down a snapshot of the Java application as it was when initialized into the image heap section. This allows us to pre-initialize certain values or configuration parameters of the application, and we don't need to load them again when we start this binary. This binary has a GC inside, so it still has some run-time system but it does no longer contain interpreter nor JIT compiler. AOT has a less advanced GC comparing it with JIT GC and no profiling data is collected for further improvement like in JIT Startup time is probably the area where the Ahead of Time compilation is beating the JIT compilation by the largest margin
  14. Native Image does not support all features of JIT. Dynamic class loading is not supported, and cannot be supported by Graal AOT execution model. During native image generation, Graal runs an aggressive static analysis that requires a closed-world assumption. For that, Graal needs to know all classes and all bytecodes that are ever reachable. Reflection. Some types of Reflection are automatically detected by Graal and some more complex cases need an additional configuration. Reflection needs to be known, flagged ahead-of-time. Native Image tries to resolve these elements through a static analysis that detects calls to the reflection API. Security Manager. Since there is no dynamic class loading, there is also no need for this feature. JMX. These interfaces require access to Java bytecodes, which are no longer available at run time. If your code is not using Dynamic class loading and you handle reflection cases carefully you should be good to go.
  15. When we are comparing AOT vs JIT compiler we can notice that AOT mode focusses on maximized startup time, memory footprint and packaging size. And we should still use JIT when Peak Throughput and Max Latency are important. Also, the nature of how you run your application is important. For example, if the run time of your application is measured in weeks or months and the size of your heap is huge, then JIT compiler will provide you most benefits. But if you are running a small service (microservice) or even a (serverless) function, where the runtime is measured in hours, minutes, seconds then you should try AOT. can we get AOT better? There are a couple things we're currently exploring to get AOT better on the areas where the JIT compiler currently is better. One is the profile guided optimizations where we collect the profiles up-front. Another one is we're working on a low-latency GC option also for the native images. This puts at least some max latency, the two versions at the same level. Then, we are continuously working to improve the way you can create native images by having, for example, a tracing agent that will automatically create your configuration. Currently, if you want to use native images, the best bet is to use one of the frameworks that has support for it, meaning, Helidon, Micronaut, or Quarkus, because those frameworks help you with some of the configurations you need to create that small thing.
  16. Saying this all, there are already few frameworks that have adopted GraalVM and the concept of native Java images and they all are targeting cloud-native microservices: Containers (cost of cloud resources, memory) Serverless (startup time of functions) Polyglot development In a later demo, we will dive deeper into the world of Quarkus. A supersonic, subatomic, cloud-native Java framework.
  17. First of all you load the classes, the Java byte codes from your disk, then you have to verify the byte codes, then you start interpreting your byte codes. And then what you do on the Java HotSpot virtual machine is that you create a first-tier compilation. You use a fast compiler, which is C1, the client compiler of HotSpot to create your first machine code. You do that because you want to speed up your application as fast as possible. Then, when a method gets really hot, meaning you've had to first compile, you've got some profile, then the method is scheduled for the second compiler, and this is when the heavyweight compiler, either the C2 compiler or the GraalVM compiler comes in and uses all the information gathered during the startup sequence of the application to create the final, hopefully, very good machine code, and then you execute faster.  As you can see there's a long sequence here, and this is the main reason why an application that is running on the Java Virtual Machine is starting up slowly.
  18. The reason is that in the JIT compilation mode of GraalVM on HotSpot, you need to keep a lot of things in memory,  you need to load parts of the JVM executable, you get the application data.  The loaded byte codes and class files. Then, you have reflection meta-data because you need to be always ready to do a certain reflection call or do a debug session on your JVM, for example. You get the code cash, this is where you'll install the Just In Time compiled code that is created on the fly. Then, you have profiling data. You need to keep the data in memory that was used to feed the JIT compiler, and then finally, the JIT compiler itself, which hopefully, when the application reaches the steady state, will be no longer relevant because hopefully, no compilations are going on anymore when your application runs for a very long time. During the startup and during the warm-up period, there'll be a lot of compilations that also take memory. In Ahead of Time compiler case this is much less available, it is much less that needs to be kept in memory. You basically load the application executable and you load the application data. The savings you get here depend on how much payload data the application has because the application payload data is the same on both configurations. If your application payload data is 32 gigabyte, you won't save anything, if your application payload data is 500 megabyte, you might save a lot.
  19. Start with Demo - quickly create some excitement about what GraalVM adds in terms of very tangible benefits Fast execution run a Java application in the normal way - show timing run the same Java application as AOT-compiled native application - show timing conclude that the application starts/runs /completes much faster - and has a smaller footprint (memory, disk) as well; no full blown JVM but light weight runtime (and show for example container sizes – container with traditional runtime and container with native binary)
  20. Human Languages Computer Programming Languages (personal taste, libraries, suitability for certain tasks, legacy) Office politics, commercial
  21. Human Languages Computer Programming Languages (personal taste, libraries, suitability for certain tasks, legacy) Office politics, commercial
  22. https://www.npmjs.com/package/validator
  23. https://www.npmjs.com/package/validator
  24. https://www.npmjs.com/package/validator
  25. https://www.npmjs.com/package/validator
  26. https://www.npmjs.com/package/validator https://www.graalvm.org/docs/reference-manual/compatibility/#validator
  27. https://www.npmjs.com/package/validator https://www.graalvm.org/docs/reference-manual/compatibility/#validator
  28. https://www.npmjs.com/package/validator https://www.graalvm.org/docs/reference-manual/compatibility/#validator
  29. https://www.npmjs.com/package/validator
  30. https://www.npmjs.com/package/validator
  31. https://www.graalvm.org/docs/reference-manual/languages/js/ https://github.com/graalvm/graaljs/blob/master/docs/user/JavaInterop.md Node.js applications running on GraalVM's JavaScript engine have access to all of Node.js' APIs, including built-in Node.js' modules such as 'fs', 'http', etc. Conversely, JavaScript code embedded in a Java application has access to limited capabilities, as specified through the Context API, and do not have access to Node.js' built-in modules.
  32. https://www.graalvm.org/docs/reference-manual/languages/js/ https://github.com/graalvm/graaljs/blob/master/docs/user/JavaInterop.md Node.js applications running on GraalVM's JavaScript engine have access to all of Node.js' APIs, including built-in Node.js' modules such as 'fs', 'http', etc. Conversely, JavaScript code embedded in a Java application has access to limited capabilities, as specified through the Context API, and do not have access to Node.js' built-in modules.
  33. https://www.graalvm.org/docs/reference-manual/languages/js/ https://github.com/graalvm/graaljs/blob/master/docs/user/JavaInterop.md Node.js applications running on GraalVM's JavaScript engine have access to all of Node.js' APIs, including built-in Node.js' modules such as 'fs', 'http', etc. Conversely, JavaScript code embedded in a Java application has access to limited capabilities, as specified through the Context API, and do not have access to Node.js' built-in modules.
  34. var FileClass = Java.type('java.io.File'); var file = new FileClass("myFile.md"); https://www.graalvm.org/docs/reference-manual/languages/js/ https://github.com/graalvm/graaljs/blob/master/docs/user/JavaInterop.md Node.js applications running on GraalVM's JavaScript engine have access to all of Node.js' APIs, including built-in Node.js' modules such as 'fs', 'http', etc. Conversely, JavaScript code embedded in a Java application has access to limited capabilities, as specified through the Context API, and do not have access to Node.js' built-in modules.
  35. var FileClass = Java.type('java.io.File'); var file = new FileClass("myFile.md"); https://www.graalvm.org/docs/reference-manual/languages/js/ https://github.com/graalvm/graaljs/blob/master/docs/user/JavaInterop.md Node.js applications running on GraalVM's JavaScript engine have access to all of Node.js' APIs, including built-in Node.js' modules such as 'fs', 'http', etc. Conversely, JavaScript code embedded in a Java application has access to limited capabilities, as specified through the Context API, and do not have access to Node.js' built-in modules.
  36. https://www.graalvm.org/docs/reference-manual/languages/js/ https://github.com/graalvm/graaljs/blob/master/docs/user/JavaInterop.md Node.js applications running on GraalVM's JavaScript engine have access to all of Node.js' APIs, including built-in Node.js' modules such as 'fs', 'http', etc. Conversely, JavaScript code embedded in a Java application has access to limited capabilities, as specified through the Context API, and do not have access to Node.js' built-in modules.
  37. var FileClass = Java.type('java.io.File'); var file = new FileClass("myFile.md"); https://www.graalvm.org/docs/reference-manual/languages/js/ https://github.com/graalvm/graaljs/blob/master/docs/user/JavaInterop.md Node.js applications running on GraalVM's JavaScript engine have access to all of Node.js' APIs, including built-in Node.js' modules such as 'fs', 'http', etc. Conversely, JavaScript code embedded in a Java application has access to limited capabilities, as specified through the Context API, and do not have access to Node.js' built-in modules.
  38. https://www.graalvm.org/docs/reference-manual/tools
  39. Last slide