SlideShare ist ein Scribd-Unternehmen logo
1 von 61
Downloaden Sie, um offline zu lesen
GRAALVM
Three languages for the Elven fullstack developers under the sky,
Seven for the Dwarf backend developers in their halls of stone,
(*) Nine for the Mortal frontend developers doomed to die,
One for the Compiler Lord on his AST throne
In the Land of Bytecodes where the programs lie.
One VM to rule them all,
One VM to find them,
One VM to bring them all,
And in Bytecodes bind them,
In the Land of Bytecodes where the programs lie.
(*) The languages are doomed to die, not the developers!
JORGE HIDALGO @deors314
GRAALVM MADRID
22 OCT 2019
WHO AM I
JORGE HIDALGO
Senior Manager – Senior Technology Architect
Accenture Technology – Global Java Practice Lead
Advanced Technology Center in Spain – Open Engineering Lead
Málaga JUG Lead
Father of two, husband, whistle player, video gamer, sci-fi *.*, Lego,
Star Wars, Star Trek, Starcraft, Halo, Borderlands, Raspberry Pi, Arduino… LLAP!
TL;DR
Examples are adapted from Chris Seaton’s workshop in
Oracle Code One 2018
Thanks to Chris for allowing us to reuse them
All examples can be found here:
https://github.com/deors/workshop-graalvm
4
GRAALVM
GraalVM – https://graalvm.org/
• Brand new polyglot virtual machine by Oracle Labs
• JVM languages, and much more!
• Written in Java -- easier to hack and to evolve
• Faster, leaner, production-ready for certain use cases
• Two flavours:
• Open source (community edition)
• Enterprise edition with further enhancements
In this session we will show some of GraalVM use cases
5
GRAALVM
This is the high-level internal architecture of GraalVM
Java HotSpot VM
SubstrateVMJVM Compiler Interface
Graal Compiler
Truffle Framework
Sulong
6
GRAALVM
AGENDA
1. GraalVM as a drop-in replacement for JDK
2. Graal as a compiler in JDK
3. Java native images
4. Polyglot VM
5. Seamless language interop
6. VM for native languages
7. Common debugging interface
8. Common monitoring interface
9. Java programs as native libraries
7
GRAALVM
1
8
GRAALVM
1. GraalVM as a drop-in replacement for JDK
• GraalVM can be used simply as an alternate VM
to run JVM programs
• 1.8 at the moment, with 11 coming soon
• It is a drop-in replacement, including all the expected tools
and the same familiar command line arguments
• New tools and commands for GraalVM specific features
9
GRAALVM
1. GraalVM as a drop-in replacement for JDK
• GraalVM has multiple components, being the Graal
compiler one of them, running on top of the HotSpot VM
thanks to the JVM Compiler Interface (JVMCI)
• Graal is written in Java, easier to maintain and to evolve
• In many cases, programs executed with Graal have better
performance and memory footprint out of the box
10
GRAALVM
1. GraalVM as a drop-in replacement for JDK
Image from Chris Thalinger’s talk on Joker 2017 conference –
“Twitter’s Quest for a Wholly Graal Runtime”
https://2017.jokerconf.com/en/2017/talks/3qdblcadmqy0me
2uuieqaq/
11
GRAALVM
1. GraalVM as a drop-in replacement for JDK
# add GraalVM to path
export PATH=~/code/tools/graalvm-ce-19.2.0.1/Contents/Home/bin:$PATH
# explore version info
java -version
12
GRAALVM
1. GraalVM as a drop-in replacement for JDK
# a simple test – program which counts words in a file
cd ~/graalvm/topten
javac TopTen.java
# running with Graal compiler (activated by default in GraalVM)
time java TopTen quick-brown-fox.txt
time java TopTen alice-in-wonderland.txt
time java TopTen war-and-peace.txt
# same program but with Graal compiler disabled
time java -XX:-UseJVMCICompiler TopTen war-and-peace.txt
13
GRAALVM
1. GraalVM as a drop-in replacement for JDK
• In a simple program, where code is executed only once or
a few times, performance improvement is small or null
• The JIT compiler in Graal, as happens with C1/C2, works
better with time, translating bytecodes into native code by
applying multiple optimizations which are fine-tuned as
execution progresses
• Using GraalVM in long running programs is the best way to
check whether Graal is improving performance or not
14
GRAALVM
1. GraalVM as a drop-in replacement for JDK
# another test, operating with complex numbers in large
cd ~/graalvm/value-types
mvn package
# running with Graal compiler (activated by default in GraalVM)
# this test uses JMH microbenchmarks
java -jar target/benchmarks.jar -prof gc
# same program but with Graal compiler disabled
java -XX:-UseJVMCICompiler -jar target/benchmarks.jar -prof gc
15
GRAALVM
2
16
GRAALVM
2. Graal as a compiler in JDK
• Graal compiler is also included with OpenJDK 11+
• It is not the latest version, so its performance is not on par
with GraalVM yet, but will be updated in forthcoming
OpenJDK releases
• It can be used as an
alternate compiler to
C1/C2 activating it
with JVM flags
17
Java HotSpot VM
SubstrateVMJVM Compiler Interface
Graal Compiler
Truffle Framework
Sulong
GRAALVM
2. Graal as a compiler in JDK
# repeat the test which counts words on a file
# with OpenJDK 11+ standard compiler
cd ~/graalvm/topten
time java TopTen war-and-peace.txt
# with OpenJDK 11+ Graal compiler
time java -XX:+UnlockExperimentalVMOptions 
-XX:+EnableJVMCI 
-XX:+UseJVMCICompiler 
TopTen war-and-peace.txt
Enables JVMCI and uses JVMCI compiler by
default in OpenJDK
It is not necessary to specify Graal, as it is
the only JVMCI-compliant compiler
available in the modulepath/classpath
18
GRAALVM
2. Graal as a compiler in JDK
# repeat the test which operates with complex numbers
# with OpenJDK 11+ standard compiler
cd ~/graalvm/value-types
java -jar target/benchmarks.jar -prof gc
# with OpenJDK 11+ Graal compiler
java -XX:+UnlockExperimentalVMOptions 
-XX:+EnableJVMCI 
-XX:+UseJVMCICompiler 
-jar target/benchmarks.jar -prof gc
19
GRAALVM
3
20
GRAALVM
3. Java native images… Yes! NATIVE JAVA!!
• JVM JIT (just in time) compiler optimisation while on
runtime has a ramp up curve and a larger resource
consumption which pays off on long running processes,
like batch, big data, scientific comp. and app servers
• But not very good for short lived processes, like CLI or
functions in the cloud-native world where startup time is a
major concern
21
GRAALVM
3. Java native images
• Graal can be used as an AOT (ahead of time) compiler to
create native images of JVM bytecodes…
• …But with some caveats:
• Reflection needs extra configuration
• Dynamic proxies need extra configuration
• No InvokeDynamic (except for lambdas)
• No bytecode generation
22
GRAALVM
3. Java native images
# native images are not installed by default with GraalVM
# SubstrateVM, which is the component that does the AOT magic
# must be installed first as an add-on
gu install native-image
Java HotSpot VM
SubstrateVMJVM Compiler Interface
Graal Compiler
Truffle Framework
Sulong
23
GRAALVM
3. Java native images
# run again a simple, short live program with GraalVM
cd ~/graalvm/topten
time java TopTen quick-brown-fox.txt
# create the native image with AOT compiler (no bytecodes were harmed!)
native-image TopTen
# run the native image
time ./topten quick-brown-fox.txt
# examine dependencies – self-contained, no GraalVM or OpenJDK in sight
otool -L topten
24
GRAALVM
3. Java native images
# a more complex scenario with reflection
cd ~/graalvm/reflection
mvn compile
# run the example bytecodes in GraalVM
java -cp target/classes graalvm.reflection.ReflectionExample
# create the native image
native-image -cp target/classes graalvm.reflection.ReflectionExample
# run the native image
./graalvm.reflection.ReflectionExample
25
GRAALVM
3. Java native images
# another example with reflection
# (class names configured in a properties file)
java -cp target/classes graalvm.reflection.ReflectionPropsExample
# create the native image
native-image -cp target/classes 
graalvm.reflection.ReflectionPropsExample
# run the fallback native image (it stills need the JDK to work!)
./graalvm.reflection.ReflectionPropsExample
26
GRAALVM
3. Java native images
# use the tracing agent to record dynamic behaviour
mkdir target/native-image
java -agentlib:native-image-agent=config-output-dir=target/native-image 
-cp target/classes graalvm.reflection.ReflectionPropsExample
# create the native image using the recorded traces
native-image -H:ReflectionConfigurationFiles=target/native-image/reflect-config.json 
-H:ResourceConfigurationFiles=target/native-image/resource-config.json 
-cp target/classes 
graalvm.reflection.ReflectionPropsExample
# run the perfectly generated native image
./graalvm.reflection.ReflectionPropsExample
27
GRAALVM
3. Java native images
• GraalVM native images are excellent to build Docker
images for processes that require a fast startup time
• As native images have minimal dependencies and do not
need the JDK, the image size is very small
• To build the Docker image, the native executable has to be
generated within a container to ensure portability
28
GRAALVM
3. Java native images
# build a Docker image with GraalVM native-image tool
docker build -t graalvm-native-image 
-f graalvm-native-image.Dockerfile .
docker images | grep graalvm
29
GRAALVM
3. Java native images
# create the native image within the container
docker run -it --rm 
--mount type=bind,source=$PWD,target=/opt/graalvm 
graalvm-native-image 
"--static" 
"-H:ReflectionConfigurationFiles=target/native-image/reflect-config.json" 
"-H:ResourceConfigurationFiles=target/native-image/resource-config.json" 
"-cp" "target/classes" 
"graalvm.reflection.ReflectionPropsExample"
# the executable is a Linux exec and may not work on your machine
./graalvm.reflection.reflectionpropsexample
30
GRAALVM
3. Java native images
# create the Docker image to run the program (Alpine Linux is enough)
docker build -t reflectionpropsexample 
-f reflectionspropsexample.Dockerfile .
docker images | grep reflectionpropsexample
# run the native image within a container
docker run -it --rm reflectionpropsexample
31
GRAALVM
3. Java native images
• These huge performance improvements on startup time
represent a major milestone for the JVM ecosystem
• Paves the way for the “faster, leaner Java” movement:
• Micronaut
• Quarkus
• Spring (*)
• Serverless computing
32
(*) https://github.com/spring-projects/spring-framework/wiki/GraalVM-native-image-support
GRAALVM
4
33
GRAALVM
4. Polyglot VM
• GraalVM, thanks to Truffle framework, provides support for
non-JVM languages
• JavaScript implementations, js and node, are
production-ready
• Other languages are
still experimental:
Ruby, Python and R
Java HotSpot VM
SubstrateVMJVM Compiler Interface
Graal Compiler
Truffle Framework
Sulong
34
GRAALVM
4. Polyglot VM
# GraalVM own implementation of JavaScript
js --version
# GraalVM own implementation of Node.js
node --version
# it also includes npm
npm --version
35
GRAALVM
4. Polyglot VM
# simple web app running with Node.js and Express
cd ~/graalvm/hello-express
npm install express
node hello-express.js
36
GRAALVM
4. Polyglot VM
# install experimental languages (not included by default)
gu install ruby && ruby --version
gu install python && graalpython --version
gu install R && R --version
# list enabled extensions
gu list
# rebuild polyglot native images (highly recommended)
gu rebuild-images polyglot libpolyglot js llvm python ruby
37
GRAALVM
4. Polyglot VM
# run a simple Ruby program with GraalVM
cd ~/graalvm/hello-ruby
ruby hello-ruby.rb
# run a simple Python program with GraalVM
cd ~/graalvm/hello-python
graalpython hello-python.py
38
GRAALVM
5
39
GRAALVM
5. Seamless language interop
• Being polyglot is cool, but being able to bring seamless
interoperability across all supported languages is
awesome!
• Every language implementation is actually processing
bytecodes, optimizing them as the execution progresses,
in a common pipeline – same JIT compiler, same
underlying VM – so it’s feasible to make this happen
40
5. Seamless language interop
# example of a Ruby program calling Java
cd ~/graalvm/interop
ruby --jvm ruby-java.rb
# example of a Python program calling Java
graalpython --jvm python-java.rb
GRAALVM
The --jvm flag enables the interop
with JVM languages
41
GRAALVM
5. Seamless language interop
# example of a Ruby program calling JavaScript
ruby --jvm --polyglot ruby-javascript.rb
To call other languages, the extra
--polyglot param is needed
42
GRAALVM
5. Seamless language interop
# example of a Node.js program calling R
cd ~/graalvm/cloudplot
npm install express
node --jvm --polyglot cloudplot.js
# renders in browser
http://localhost:8080
http://localhost:8080/js
43
GRAALVM
6
44
GRAALVM
6. VM for native languages
• GraalVM also has an interpreter for LLVM, named Sulong
• With this interpreter Truffle translates into bytecodes any
language with a compiler capable of emitting LLVM codes
• C, C++, Rust
– maybe others, too
• Very experimental
– performance still far
from desirable
Java HotSpot VM
SubstrateVMJVM Compiler Interface
Graal Compiler
Truffle Framework
Sulong
45
GRAALVM
6. VM for native languages
# compile a C program in the normal way, and emitting LLVM
cd ~/graalvm/gzip
clang gzip.c -o gzip
clang -c -emit-llvm gzip.c
# execute the C native program
time ./gzip -d war-and-peace.txt.gz && 
time ./gzip war-and-peace.txt
# execute the program with Sulong (GraalVM LLVM bitcode interpreter)
time lli gzip.bc -d war-and-peace.txt.gz && 
time lli gzip.bc war-and-peace.txt
46
GRAALVM
7
47
GRAALVM
7. Common debugging interface
• A consequence of running multiple languages in the same
compiler framework it to have a common debugging
interface
• Even for programs with language interop
• Extremely useful as not all languages have debuggers, or
have them but not so good as we are used with JVM
languages
48
GRAALVM
7. Common debugging interface
# debugging a Ruby program
cd ~/graalvm/fizzbuzz
ruby --inspect fizzbuzz.rb
# debugging a Python program
graalpython --inspect fizzbuzz.py
# debugging an R program
R --inspect -f fizzbuzz.r
# debugging a JavaScript program
js --inspect fizzbuzz.js
49
GRAALVM
8
50
GRAALVM
8. Common monitoring interface
• In the JVM world we are used to tools like VisualVM or
Mission Control to monitor applications and connect with
JMX metrics and actions
• With GraalVM, it is possible to leverage all those tools in
any supported languages
• Command-line options to enable tracing are available, too
• Invaluable as not all languages have monitoring tools, or
they are far from what it is common in the JVM
51
GRAALVM
8. Common monitoring interface
# monitoring a Ruby program
cd ~/graalvm/infloop
ruby --jvm infloop.rb
# in a separate console
jvisualvm
52
GRAALVM
9
53
GRAALVM
9. Java programs as native libraries
• GraalVM enables us to run programs in many languages
• We can interop across those languages
• We can convert to native image
• It is also possible to run Java programs from any native
program, or programs with foreign function interfaces (FF),
like Ruby, Python, Rust, Go, Haskell, Dart, etc.
54
GRAALVM
9. Java programs as native libraries
• Many advantages to Java (and others) developers:
• Interfaces are automatically generated
• Very simple API
• Library is automatically generated
• Access to the Java ecosystem from anywhere
• Like JNI... but much, much, much easier than JNI!
55
GRAALVM
9. Java programs as native libraries
# program which calculates distances with Apache SIS
cd ~/graalvm/distance
javac -cp sis.jar Distance.java
java -cp sis.jar:. Distance 51.507222 -0.1275 40.7127 -74.0059
# create native image
native-image -cp sis.jar:. Distance
./distance 51.507222 -0.1275 40.7127 -74.0059
56
GRAALVM
9. Java programs as native libraries
57
GRAALVM
9. Java programs as native libraries
# creates a native library from the same program
native-image -cp sis.jar:. --shared -H:Name=libdistance Distance
# interfaces and library are automatically generated
ls -l libdistance*
# the Apache SIS Java library is now used from a C program
clang -I. -L. -ldistance distance.c -o distancec
otool -L distancec
./distancec 51.507222 -0.1275 40.7127 -74.0059
😍 58
GRAALVM
99
59
CONCLUSIONS
GraalVM – https://graalvm.org/
• Freedom of choice of language
• Access to multiple ecosystems
• JVM or native images
• Full interop across languages
• Debugging and monitoring tools
• With better performance in many cases
• ‘ONE VM TO RULE THEM ALL’ J
60
QUESTIONS?
THANK YOU!

Weitere ähnliche Inhalte

Was ist angesagt?

Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerKoichi Sakata
 
GraalVM Overview Compact version
GraalVM Overview Compact versionGraalVM Overview Compact version
GraalVM Overview Compact versionscalaconfjp
 
Highly Surmountable Challenges in Ruby+OMR JIT Compilation
Highly Surmountable Challenges in Ruby+OMR JIT CompilationHighly Surmountable Challenges in Ruby+OMR JIT Compilation
Highly Surmountable Challenges in Ruby+OMR JIT CompilationMatthew Gaudet
 
TechEvent Graal(VM) Performance Interoperability
TechEvent Graal(VM) Performance InteroperabilityTechEvent Graal(VM) Performance Interoperability
TechEvent Graal(VM) Performance InteroperabilityTrivadis
 
Polyglot Applications with GraalVM
Polyglot Applications with GraalVMPolyglot Applications with GraalVM
Polyglot Applications with GraalVMjexp
 
meetPHP#8 - PHP startups prototypes
meetPHP#8 - PHP startups prototypesmeetPHP#8 - PHP startups prototypes
meetPHP#8 - PHP startups prototypesMax Małecki
 
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanScala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanJimin Hsieh
 
JRoR Deploying Rails on JRuby
JRoR Deploying Rails on JRubyJRoR Deploying Rails on JRuby
JRoR Deploying Rails on JRubyelliando dias
 
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
Lightweight Virtualization with Linux Containers and Docker | YaC 2013Lightweight Virtualization with Linux Containers and Docker | YaC 2013
Lightweight Virtualization with Linux Containers and Docker | YaC 2013dotCloud
 
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019Jakarta_EE
 
Migration Spring Boot PetClinic REST to Quarkus 1.2.0
Migration Spring Boot PetClinic REST to Quarkus 1.2.0Migration Spring Boot PetClinic REST to Quarkus 1.2.0
Migration Spring Boot PetClinic REST to Quarkus 1.2.0Jonathan Vila
 
FOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMRFOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMRCharlie Gracie
 
Northwest Python Day 2009
Northwest Python Day 2009Northwest Python Day 2009
Northwest Python Day 2009Ted Leung
 
Why Python In Entertainment Industry?
Why Python In Entertainment Industry?Why Python In Entertainment Industry?
Why Python In Entertainment Industry?Shuen-Huei Guan
 
平行化你的工作 part1
平行化你的工作 part1平行化你的工作 part1
平行化你的工作 part1Shuen-Huei Guan
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplateStanislav Petrov
 
Golang from Scala developer’s perspective
Golang from Scala developer’s perspectiveGolang from Scala developer’s perspective
Golang from Scala developer’s perspectiveSveta Bozhko
 

Was ist angesagt? (20)

JVM++: The Graal VM
JVM++: The Graal VMJVM++: The Graal VM
JVM++: The Graal VM
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT Compiler
 
GraalVM Overview Compact version
GraalVM Overview Compact versionGraalVM Overview Compact version
GraalVM Overview Compact version
 
Highly Surmountable Challenges in Ruby+OMR JIT Compilation
Highly Surmountable Challenges in Ruby+OMR JIT CompilationHighly Surmountable Challenges in Ruby+OMR JIT Compilation
Highly Surmountable Challenges in Ruby+OMR JIT Compilation
 
TechEvent Graal(VM) Performance Interoperability
TechEvent Graal(VM) Performance InteroperabilityTechEvent Graal(VM) Performance Interoperability
TechEvent Graal(VM) Performance Interoperability
 
Polyglot Applications with GraalVM
Polyglot Applications with GraalVMPolyglot Applications with GraalVM
Polyglot Applications with GraalVM
 
meetPHP#8 - PHP startups prototypes
meetPHP#8 - PHP startups prototypesmeetPHP#8 - PHP startups prototypes
meetPHP#8 - PHP startups prototypes
 
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanScala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
 
JRoR Deploying Rails on JRuby
JRoR Deploying Rails on JRubyJRoR Deploying Rails on JRuby
JRoR Deploying Rails on JRuby
 
Slides
SlidesSlides
Slides
 
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
Lightweight Virtualization with Linux Containers and Docker | YaC 2013Lightweight Virtualization with Linux Containers and Docker | YaC 2013
Lightweight Virtualization with Linux Containers and Docker | YaC 2013
 
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
Kubernetes Native Java and Eclipse MicroProfile | EclipseCon Europe 2019
 
Migration Spring Boot PetClinic REST to Quarkus 1.2.0
Migration Spring Boot PetClinic REST to Quarkus 1.2.0Migration Spring Boot PetClinic REST to Quarkus 1.2.0
Migration Spring Boot PetClinic REST to Quarkus 1.2.0
 
FOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMRFOSDEM2016 - Ruby and OMR
FOSDEM2016 - Ruby and OMR
 
Northwest Python Day 2009
Northwest Python Day 2009Northwest Python Day 2009
Northwest Python Day 2009
 
Why Python In Entertainment Industry?
Why Python In Entertainment Industry?Why Python In Entertainment Industry?
Why Python In Entertainment Industry?
 
平行化你的工作 part1
平行化你的工作 part1平行化你的工作 part1
平行化你的工作 part1
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplate
 
Golang from Scala developer’s perspective
Golang from Scala developer’s perspectiveGolang from Scala developer’s perspective
Golang from Scala developer’s perspective
 

Ähnlich wie GraalVM - MadridJUG 2019-10-22

Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVMRyan Cuprak
 
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
 
Everything you need to know about GraalVM Native Image
Everything you need to know about GraalVM Native ImageEverything you need to know about GraalVM Native Image
Everything you need to know about GraalVM Native ImageAlina Yurenko
 
How the HotSpot and Graal JVMs execute Java Code
How the HotSpot and Graal JVMs execute Java CodeHow the HotSpot and Graal JVMs execute Java Code
How the HotSpot and Graal JVMs execute Java CodeJim Gough
 
Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...
Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...
Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...scalaconfjp
 
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
 
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
 
Efficient DevOps Tooling with Java and GraalVM
Efficient DevOps Tooling with Java and GraalVMEfficient DevOps Tooling with Java and GraalVM
Efficient DevOps Tooling with Java and GraalVMQAware GmbH
 
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
 
AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0MoritzHalbritter
 
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5David Voyles
 
DCSF19 Docker Containers & Java: What I Wish I Had Been Told
DCSF19 Docker Containers & Java: What I Wish I Had Been ToldDCSF19 Docker Containers & Java: What I Wish I Had Been Told
DCSF19 Docker Containers & Java: What I Wish I Had Been ToldDocker, Inc.
 
Drools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationDrools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationMark Proctor
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
C++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserC++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserAndre Weissflog
 
Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Arun Gupta
 

Ähnlich wie GraalVM - MadridJUG 2019-10-22 (20)

GraalVM
GraalVMGraalVM
GraalVM
 
Peru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVMPeru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVM
 
Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVM
 
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
 
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
 
Everything you need to know about GraalVM Native Image
Everything you need to know about GraalVM Native ImageEverything you need to know about GraalVM Native Image
Everything you need to know about GraalVM Native Image
 
How the HotSpot and Graal JVMs execute Java Code
How the HotSpot and Graal JVMs execute Java CodeHow the HotSpot and Graal JVMs execute Java Code
How the HotSpot and Graal JVMs execute Java Code
 
Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...
Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...
Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...
 
JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?JavaOne2015-What's in an Object?
JavaOne2015-What's in an Object?
 
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
 
Efficient DevOps Tooling with Java and GraalVM
Efficient DevOps Tooling with Java and GraalVMEfficient DevOps Tooling with Java and GraalVM
Efficient DevOps Tooling with Java and GraalVM
 
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
 
AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0
 
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
Getting started with Emscripten – Transpiling C / C++ to JavaScript / HTML5
 
DCSF19 Docker Containers & Java: What I Wish I Had Been Told
DCSF19 Docker Containers & Java: What I Wish I Had Been ToldDCSF19 Docker Containers & Java: What I Wish I Had Been Told
DCSF19 Docker Containers & Java: What I Wish I Had Been Told
 
Drools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationDrools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentation
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
C++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browserC++ on the Web: Run your big 3D game in the browser
C++ on the Web: Run your big 3D game in the browser
 
Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009
 
Js tacktalk team dev js testing performance
Js tacktalk team dev js testing performanceJs tacktalk team dev js testing performance
Js tacktalk team dev js testing performance
 

Mehr von Jorge Hidalgo

Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Jorge Hidalgo
 
GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29Jorge Hidalgo
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Jorge Hidalgo
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Jorge Hidalgo
 
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Jorge Hidalgo
 
DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03Jorge Hidalgo
 
Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Jorge Hidalgo
 
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...Jorge Hidalgo
 
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
JavaOne 2017 CON3276 - Selenium Testing Patterns ReloadedJavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
JavaOne 2017 CON3276 - Selenium Testing Patterns ReloadedJorge Hidalgo
 
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power ToolsJavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power ToolsJorge Hidalgo
 
All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06Jorge Hidalgo
 
Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Jorge Hidalgo
 
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Jorge Hidalgo
 
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17Jorge Hidalgo
 
OpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesOpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesJorge Hidalgo
 
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJorge Hidalgo
 
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07Jorge Hidalgo
 
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost ComputersJavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost ComputersJorge Hidalgo
 
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...Jorge Hidalgo
 
Next-gen IDE v2 - OpenSlava 2013-10-11
Next-gen IDE v2 - OpenSlava 2013-10-11Next-gen IDE v2 - OpenSlava 2013-10-11
Next-gen IDE v2 - OpenSlava 2013-10-11Jorge Hidalgo
 

Mehr von Jorge Hidalgo (20)

Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01
 
GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
 
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
 
DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03
 
Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02
 
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
 
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
JavaOne 2017 CON3276 - Selenium Testing Patterns ReloadedJavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
 
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power ToolsJavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
 
All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06
 
Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017
 
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
 
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
 
OpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesOpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java Architectures
 
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
 
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
 
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost ComputersJavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
JavaOne 2015 - CON6489 - Smart Open Spaces Powered by Low Cost Computers
 
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
JavaOne 2014 - CON2013 - Code Generation in the Java Compiler: Annotation Pro...
 
Next-gen IDE v2 - OpenSlava 2013-10-11
Next-gen IDE v2 - OpenSlava 2013-10-11Next-gen IDE v2 - OpenSlava 2013-10-11
Next-gen IDE v2 - OpenSlava 2013-10-11
 

Kürzlich hochgeladen

How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 

Kürzlich hochgeladen (20)

2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 

GraalVM - MadridJUG 2019-10-22

  • 1. GRAALVM Three languages for the Elven fullstack developers under the sky, Seven for the Dwarf backend developers in their halls of stone, (*) Nine for the Mortal frontend developers doomed to die, One for the Compiler Lord on his AST throne In the Land of Bytecodes where the programs lie. One VM to rule them all, One VM to find them, One VM to bring them all, And in Bytecodes bind them, In the Land of Bytecodes where the programs lie. (*) The languages are doomed to die, not the developers!
  • 2. JORGE HIDALGO @deors314 GRAALVM MADRID 22 OCT 2019
  • 3. WHO AM I JORGE HIDALGO Senior Manager – Senior Technology Architect Accenture Technology – Global Java Practice Lead Advanced Technology Center in Spain – Open Engineering Lead Málaga JUG Lead Father of two, husband, whistle player, video gamer, sci-fi *.*, Lego, Star Wars, Star Trek, Starcraft, Halo, Borderlands, Raspberry Pi, Arduino… LLAP!
  • 4. TL;DR Examples are adapted from Chris Seaton’s workshop in Oracle Code One 2018 Thanks to Chris for allowing us to reuse them All examples can be found here: https://github.com/deors/workshop-graalvm 4
  • 5. GRAALVM GraalVM – https://graalvm.org/ • Brand new polyglot virtual machine by Oracle Labs • JVM languages, and much more! • Written in Java -- easier to hack and to evolve • Faster, leaner, production-ready for certain use cases • Two flavours: • Open source (community edition) • Enterprise edition with further enhancements In this session we will show some of GraalVM use cases 5
  • 6. GRAALVM This is the high-level internal architecture of GraalVM Java HotSpot VM SubstrateVMJVM Compiler Interface Graal Compiler Truffle Framework Sulong 6
  • 7. GRAALVM AGENDA 1. GraalVM as a drop-in replacement for JDK 2. Graal as a compiler in JDK 3. Java native images 4. Polyglot VM 5. Seamless language interop 6. VM for native languages 7. Common debugging interface 8. Common monitoring interface 9. Java programs as native libraries 7
  • 9. GRAALVM 1. GraalVM as a drop-in replacement for JDK • GraalVM can be used simply as an alternate VM to run JVM programs • 1.8 at the moment, with 11 coming soon • It is a drop-in replacement, including all the expected tools and the same familiar command line arguments • New tools and commands for GraalVM specific features 9
  • 10. GRAALVM 1. GraalVM as a drop-in replacement for JDK • GraalVM has multiple components, being the Graal compiler one of them, running on top of the HotSpot VM thanks to the JVM Compiler Interface (JVMCI) • Graal is written in Java, easier to maintain and to evolve • In many cases, programs executed with Graal have better performance and memory footprint out of the box 10
  • 11. GRAALVM 1. GraalVM as a drop-in replacement for JDK Image from Chris Thalinger’s talk on Joker 2017 conference – “Twitter’s Quest for a Wholly Graal Runtime” https://2017.jokerconf.com/en/2017/talks/3qdblcadmqy0me 2uuieqaq/ 11
  • 12. GRAALVM 1. GraalVM as a drop-in replacement for JDK # add GraalVM to path export PATH=~/code/tools/graalvm-ce-19.2.0.1/Contents/Home/bin:$PATH # explore version info java -version 12
  • 13. GRAALVM 1. GraalVM as a drop-in replacement for JDK # a simple test – program which counts words in a file cd ~/graalvm/topten javac TopTen.java # running with Graal compiler (activated by default in GraalVM) time java TopTen quick-brown-fox.txt time java TopTen alice-in-wonderland.txt time java TopTen war-and-peace.txt # same program but with Graal compiler disabled time java -XX:-UseJVMCICompiler TopTen war-and-peace.txt 13
  • 14. GRAALVM 1. GraalVM as a drop-in replacement for JDK • In a simple program, where code is executed only once or a few times, performance improvement is small or null • The JIT compiler in Graal, as happens with C1/C2, works better with time, translating bytecodes into native code by applying multiple optimizations which are fine-tuned as execution progresses • Using GraalVM in long running programs is the best way to check whether Graal is improving performance or not 14
  • 15. GRAALVM 1. GraalVM as a drop-in replacement for JDK # another test, operating with complex numbers in large cd ~/graalvm/value-types mvn package # running with Graal compiler (activated by default in GraalVM) # this test uses JMH microbenchmarks java -jar target/benchmarks.jar -prof gc # same program but with Graal compiler disabled java -XX:-UseJVMCICompiler -jar target/benchmarks.jar -prof gc 15
  • 17. GRAALVM 2. Graal as a compiler in JDK • Graal compiler is also included with OpenJDK 11+ • It is not the latest version, so its performance is not on par with GraalVM yet, but will be updated in forthcoming OpenJDK releases • It can be used as an alternate compiler to C1/C2 activating it with JVM flags 17 Java HotSpot VM SubstrateVMJVM Compiler Interface Graal Compiler Truffle Framework Sulong
  • 18. GRAALVM 2. Graal as a compiler in JDK # repeat the test which counts words on a file # with OpenJDK 11+ standard compiler cd ~/graalvm/topten time java TopTen war-and-peace.txt # with OpenJDK 11+ Graal compiler time java -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler TopTen war-and-peace.txt Enables JVMCI and uses JVMCI compiler by default in OpenJDK It is not necessary to specify Graal, as it is the only JVMCI-compliant compiler available in the modulepath/classpath 18
  • 19. GRAALVM 2. Graal as a compiler in JDK # repeat the test which operates with complex numbers # with OpenJDK 11+ standard compiler cd ~/graalvm/value-types java -jar target/benchmarks.jar -prof gc # with OpenJDK 11+ Graal compiler java -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler -jar target/benchmarks.jar -prof gc 19
  • 21. GRAALVM 3. Java native images… Yes! NATIVE JAVA!! • JVM JIT (just in time) compiler optimisation while on runtime has a ramp up curve and a larger resource consumption which pays off on long running processes, like batch, big data, scientific comp. and app servers • But not very good for short lived processes, like CLI or functions in the cloud-native world where startup time is a major concern 21
  • 22. GRAALVM 3. Java native images • Graal can be used as an AOT (ahead of time) compiler to create native images of JVM bytecodes… • …But with some caveats: • Reflection needs extra configuration • Dynamic proxies need extra configuration • No InvokeDynamic (except for lambdas) • No bytecode generation 22
  • 23. GRAALVM 3. Java native images # native images are not installed by default with GraalVM # SubstrateVM, which is the component that does the AOT magic # must be installed first as an add-on gu install native-image Java HotSpot VM SubstrateVMJVM Compiler Interface Graal Compiler Truffle Framework Sulong 23
  • 24. GRAALVM 3. Java native images # run again a simple, short live program with GraalVM cd ~/graalvm/topten time java TopTen quick-brown-fox.txt # create the native image with AOT compiler (no bytecodes were harmed!) native-image TopTen # run the native image time ./topten quick-brown-fox.txt # examine dependencies – self-contained, no GraalVM or OpenJDK in sight otool -L topten 24
  • 25. GRAALVM 3. Java native images # a more complex scenario with reflection cd ~/graalvm/reflection mvn compile # run the example bytecodes in GraalVM java -cp target/classes graalvm.reflection.ReflectionExample # create the native image native-image -cp target/classes graalvm.reflection.ReflectionExample # run the native image ./graalvm.reflection.ReflectionExample 25
  • 26. GRAALVM 3. Java native images # another example with reflection # (class names configured in a properties file) java -cp target/classes graalvm.reflection.ReflectionPropsExample # create the native image native-image -cp target/classes graalvm.reflection.ReflectionPropsExample # run the fallback native image (it stills need the JDK to work!) ./graalvm.reflection.ReflectionPropsExample 26
  • 27. GRAALVM 3. Java native images # use the tracing agent to record dynamic behaviour mkdir target/native-image java -agentlib:native-image-agent=config-output-dir=target/native-image -cp target/classes graalvm.reflection.ReflectionPropsExample # create the native image using the recorded traces native-image -H:ReflectionConfigurationFiles=target/native-image/reflect-config.json -H:ResourceConfigurationFiles=target/native-image/resource-config.json -cp target/classes graalvm.reflection.ReflectionPropsExample # run the perfectly generated native image ./graalvm.reflection.ReflectionPropsExample 27
  • 28. GRAALVM 3. Java native images • GraalVM native images are excellent to build Docker images for processes that require a fast startup time • As native images have minimal dependencies and do not need the JDK, the image size is very small • To build the Docker image, the native executable has to be generated within a container to ensure portability 28
  • 29. GRAALVM 3. Java native images # build a Docker image with GraalVM native-image tool docker build -t graalvm-native-image -f graalvm-native-image.Dockerfile . docker images | grep graalvm 29
  • 30. GRAALVM 3. Java native images # create the native image within the container docker run -it --rm --mount type=bind,source=$PWD,target=/opt/graalvm graalvm-native-image "--static" "-H:ReflectionConfigurationFiles=target/native-image/reflect-config.json" "-H:ResourceConfigurationFiles=target/native-image/resource-config.json" "-cp" "target/classes" "graalvm.reflection.ReflectionPropsExample" # the executable is a Linux exec and may not work on your machine ./graalvm.reflection.reflectionpropsexample 30
  • 31. GRAALVM 3. Java native images # create the Docker image to run the program (Alpine Linux is enough) docker build -t reflectionpropsexample -f reflectionspropsexample.Dockerfile . docker images | grep reflectionpropsexample # run the native image within a container docker run -it --rm reflectionpropsexample 31
  • 32. GRAALVM 3. Java native images • These huge performance improvements on startup time represent a major milestone for the JVM ecosystem • Paves the way for the “faster, leaner Java” movement: • Micronaut • Quarkus • Spring (*) • Serverless computing 32 (*) https://github.com/spring-projects/spring-framework/wiki/GraalVM-native-image-support
  • 34. GRAALVM 4. Polyglot VM • GraalVM, thanks to Truffle framework, provides support for non-JVM languages • JavaScript implementations, js and node, are production-ready • Other languages are still experimental: Ruby, Python and R Java HotSpot VM SubstrateVMJVM Compiler Interface Graal Compiler Truffle Framework Sulong 34
  • 35. GRAALVM 4. Polyglot VM # GraalVM own implementation of JavaScript js --version # GraalVM own implementation of Node.js node --version # it also includes npm npm --version 35
  • 36. GRAALVM 4. Polyglot VM # simple web app running with Node.js and Express cd ~/graalvm/hello-express npm install express node hello-express.js 36
  • 37. GRAALVM 4. Polyglot VM # install experimental languages (not included by default) gu install ruby && ruby --version gu install python && graalpython --version gu install R && R --version # list enabled extensions gu list # rebuild polyglot native images (highly recommended) gu rebuild-images polyglot libpolyglot js llvm python ruby 37
  • 38. GRAALVM 4. Polyglot VM # run a simple Ruby program with GraalVM cd ~/graalvm/hello-ruby ruby hello-ruby.rb # run a simple Python program with GraalVM cd ~/graalvm/hello-python graalpython hello-python.py 38
  • 40. GRAALVM 5. Seamless language interop • Being polyglot is cool, but being able to bring seamless interoperability across all supported languages is awesome! • Every language implementation is actually processing bytecodes, optimizing them as the execution progresses, in a common pipeline – same JIT compiler, same underlying VM – so it’s feasible to make this happen 40
  • 41. 5. Seamless language interop # example of a Ruby program calling Java cd ~/graalvm/interop ruby --jvm ruby-java.rb # example of a Python program calling Java graalpython --jvm python-java.rb GRAALVM The --jvm flag enables the interop with JVM languages 41
  • 42. GRAALVM 5. Seamless language interop # example of a Ruby program calling JavaScript ruby --jvm --polyglot ruby-javascript.rb To call other languages, the extra --polyglot param is needed 42
  • 43. GRAALVM 5. Seamless language interop # example of a Node.js program calling R cd ~/graalvm/cloudplot npm install express node --jvm --polyglot cloudplot.js # renders in browser http://localhost:8080 http://localhost:8080/js 43
  • 45. GRAALVM 6. VM for native languages • GraalVM also has an interpreter for LLVM, named Sulong • With this interpreter Truffle translates into bytecodes any language with a compiler capable of emitting LLVM codes • C, C++, Rust – maybe others, too • Very experimental – performance still far from desirable Java HotSpot VM SubstrateVMJVM Compiler Interface Graal Compiler Truffle Framework Sulong 45
  • 46. GRAALVM 6. VM for native languages # compile a C program in the normal way, and emitting LLVM cd ~/graalvm/gzip clang gzip.c -o gzip clang -c -emit-llvm gzip.c # execute the C native program time ./gzip -d war-and-peace.txt.gz && time ./gzip war-and-peace.txt # execute the program with Sulong (GraalVM LLVM bitcode interpreter) time lli gzip.bc -d war-and-peace.txt.gz && time lli gzip.bc war-and-peace.txt 46
  • 48. GRAALVM 7. Common debugging interface • A consequence of running multiple languages in the same compiler framework it to have a common debugging interface • Even for programs with language interop • Extremely useful as not all languages have debuggers, or have them but not so good as we are used with JVM languages 48
  • 49. GRAALVM 7. Common debugging interface # debugging a Ruby program cd ~/graalvm/fizzbuzz ruby --inspect fizzbuzz.rb # debugging a Python program graalpython --inspect fizzbuzz.py # debugging an R program R --inspect -f fizzbuzz.r # debugging a JavaScript program js --inspect fizzbuzz.js 49
  • 51. GRAALVM 8. Common monitoring interface • In the JVM world we are used to tools like VisualVM or Mission Control to monitor applications and connect with JMX metrics and actions • With GraalVM, it is possible to leverage all those tools in any supported languages • Command-line options to enable tracing are available, too • Invaluable as not all languages have monitoring tools, or they are far from what it is common in the JVM 51
  • 52. GRAALVM 8. Common monitoring interface # monitoring a Ruby program cd ~/graalvm/infloop ruby --jvm infloop.rb # in a separate console jvisualvm 52
  • 54. GRAALVM 9. Java programs as native libraries • GraalVM enables us to run programs in many languages • We can interop across those languages • We can convert to native image • It is also possible to run Java programs from any native program, or programs with foreign function interfaces (FF), like Ruby, Python, Rust, Go, Haskell, Dart, etc. 54
  • 55. GRAALVM 9. Java programs as native libraries • Many advantages to Java (and others) developers: • Interfaces are automatically generated • Very simple API • Library is automatically generated • Access to the Java ecosystem from anywhere • Like JNI... but much, much, much easier than JNI! 55
  • 56. GRAALVM 9. Java programs as native libraries # program which calculates distances with Apache SIS cd ~/graalvm/distance javac -cp sis.jar Distance.java java -cp sis.jar:. Distance 51.507222 -0.1275 40.7127 -74.0059 # create native image native-image -cp sis.jar:. Distance ./distance 51.507222 -0.1275 40.7127 -74.0059 56
  • 57. GRAALVM 9. Java programs as native libraries 57
  • 58. GRAALVM 9. Java programs as native libraries # creates a native library from the same program native-image -cp sis.jar:. --shared -H:Name=libdistance Distance # interfaces and library are automatically generated ls -l libdistance* # the Apache SIS Java library is now used from a C program clang -I. -L. -ldistance distance.c -o distancec otool -L distancec ./distancec 51.507222 -0.1275 40.7127 -74.0059 😍 58
  • 60. CONCLUSIONS GraalVM – https://graalvm.org/ • Freedom of choice of language • Access to multiple ecosystems • JVM or native images • Full interop across languages • Debugging and monitoring tools • With better performance in many cases • ‘ONE VM TO RULE THEM ALL’ J 60