To the Moon and Beyond
With Java 17 APIs!
Gunnar Morling
Software Engineer, Red Hat
@gunnarmorling
#Java17APIs @gunnarmorling
“Commit [ourselves] to
achieving the goal, before
this decade talk is out, of
landing a man Duke on the
Moon and returning him
safely to the Earth”
Today’s Mission
John F. Kennedy
The Vector API 1
JFR Event Streaming
2
3
The Foreign Linker
API
#Java17APIs @gunnarmorling
● Projects
○ Debezium
○ Quarkus
○ Hibernate
● MapStruct, JfrUnit, kcctl 🧸
● Java Champion
● @gunnarmorling
Gunnar Morling
Open Source Software Engineer at Red Hat
The Vector API
1
#Java17APIs @gunnarmorling
The Vector API
JEPs 338 / 414 / 417
java.util.Vector?!
#Java17APIs @gunnarmorling
“Introduce an API to express vector
computations that reliably compile at runtime
to optimal vector instructions on supported
CPU architectures, thus achieving
performance superior to equivalent scalar
computations.”
The Vector API
JEPs 338 / 414 / 417
JEP 417
#Java17APIs @gunnarmorling
The Vector API
Goals
Clear and concise API
1
Reliable runtime compilation
and performance on
x64 (SSE, AVX) and
AArch64 (NEON, SVE)
2
3 4
Platform agnostic
Graceful degradation
#Java17APIs @gunnarmorling
The Vector API
Use Cases
● Image, text, signal
processing
● Encryption
● Machine Learning
● etc.
#Java17APIs @gunnarmorling
The Vector API
Terminology
#Java17APIs @gunnarmorling
The Vector API
Example – Scalar
c = -(a2
+ b2
)
#Java17APIs @gunnarmorling
The Vector API
Example – Vector
#Java17APIs @gunnarmorling
The Vector API
Example – Vector
#Java17APIs @gunnarmorling
The Vector API
Example – Vector
#Java17APIs @gunnarmorling
The Vector API
Example – Vector
#Java17APIs @gunnarmorling
The Vector API
Example – Vector
#Java17APIs @gunnarmorling
The Vector API
A Very Rich API
#Java17APIs @gunnarmorling
The Vector API
Example – FizzBuzz
#Java17APIs @gunnarmorling
The Vector API
FizzBuzz – Performance
Benchmark Mode Cnt Score Error Units
scalarFizzBuzz thrpt 5 2204774,792 Âą 76581,374 ops/s
simdFizzBuzz thrpt 5 8830433,250 Âą 69955,161 ops/s
MacBook Pro 2019 (2,6 GHz 6-Core Intel Core i7, 32GB RAM)
#Java17APIs @gunnarmorling
The Vector API
Examining Assembly Code with Hsdis
#Java17APIs @gunnarmorling
The Vector API
Examining Native Assembly
"conditionally copies
byte elements from
the source operand to
the destination
operand depending
on mask bits dened
in the implicit third
register argument"
felixcloutier.com
Detour
Identifying JDK API
Changes by Yourself
#Java17APIs @gunnarmorling
Detour: Identifying API Changes
javaalmanac.io
#Java17APIs @gunnarmorling
Detour: Identifying API Changes
github.com/AdoptOpenJDK/jdk-api-diff
#Java17APIs @gunnarmorling
Detour: Identifying API Changes
chriswhocodes.com/jepsearch.html
#Java17APIs @gunnarmorling
Detour: Identifying API Changes
JavaDoc ab Version 17
1
JFR Event Streaming 3
2
The Vector API
The Foreign Linker
API
#Java17APIs @gunnarmorling
● Accessing native Memory (JEP 383)
● Accessing native APIs (JEP 389)
○ Moving specific parts to native code
○ Using existing native libraries
● Vector API
Projekt Panama
Integration of JVM and Native Code
#Java17APIs @gunnarmorling
Foreign Linker API
Using Method Handle
#Java17APIs @gunnarmorling
Foreign Linker API
Using Method Handle
#Java17APIs @gunnarmorling
Foreign Linker API
Using Method Handle
#Java17APIs @gunnarmorling
● Provide or create header file
● Generate binding (Panama EA build required)
Foreign Linker API
jextract
#Java17APIs @gunnarmorling
Foreign Linker API
jextract
#Java17APIs @gunnarmorling
Foreign Linker API
github.com/sundararajana/panama-jextract-samples
Detour
Removed APIs
#Java17APIs @gunnarmorling
● RMI Activation
● Pack 200
● Nashorn JavaScript-Engine
● Deprecated for Removal in Java 17
○ Applet API
○ Security Manager
Detour: Removed APIs
Tackling the Maintenance Burden
→ 🤷
→ 🤷
→ Standalone Nashorn
(since Java 15), GraalJS
1
JFR Event Streaming
2
3
The Vector API
The Foreign Linker
API
#Java17APIs @gunnarmorling
OpenJDK Flight Recorder
● “JVM framework for troubleshooting,
monitoring and profiling”
● 150+ built-in event types
● Support for custom events
● Open source since Java 11
● Meant for “Always on” usage in production
#Java17APIs @gunnarmorling
JFR Event Types
https://bestsolution-at.github.io/jfr-doc/
#Java17APIs @gunnarmorling
JFR Event Streaming
JEP 349
● Processing JFR events in “real-time”
● Use Cases
○ Export to monitoring services
○ Performance tests (JfrUnit)
○ Predictive analytics
#Java17APIs @gunnarmorling
JFR Event Streaming
API
#Java17APIs @gunnarmorling
JFR Event Streaming
Out-of-process: github.com/flight-recorder/health-report
#Java17APIs @gunnarmorling
● Performance tests based on metrics like latency/throughput
often unstable
● JfrUnit
○ Assertions based on proxy metrics
○ Plain JUnit-Tests
○ Analysis via JDK Mission Control
JFR Event Streaming
Use Case: Performance Regression Tests with JfrUnit
“Unit testing,
for performance”
#Java17APIs @gunnarmorling
JFR Event Streaming
Asserting Socket IO with JfrUnit
#Java17APIs @gunnarmorling
JFR Event Streaming
Asserting Socket IO with JfrUnit
#Java17APIs @gunnarmorling
JFR Event Streaming
Asserting Socket IO with JfrUnit
#Java17APIs @gunnarmorling
JFR Event Streaming
Asserting Socket IO with JfrUnit
#Java17APIs @gunnarmorling
JFR Event Streaming
Asserting Socket IO with JfrUnit
Detour
AppCDS
#Java17APIs @gunnarmorling
JFR Event Streaming
Asserting Socket IO with JfrUnit
#Java17APIs @gunnarmorling
● Class Data Sharing: Memory mapped class metadata
● Default CDS archive for JDK classes since Java 12 (JEP 341)
● AppCDS: CDS archive for your own classes
Detour: Faster Start-up with AppCDS
No Need to Go Native?
#Java17APIs @gunnarmorling
Detour: AppCDS
Quarkus App – Time to First Response
Hetzner Cloud CX4 (4 vCPUs, 16GB RAM)
#Java17APIs @gunnarmorling
Detour: AppCDS
Start-up Time of Apache Kafka
#Java17APIs @gunnarmorling
Java 17 – An Update Well Worth It!
Many Improvements Across the Board...
Language
API
Runtime
#Java17APIs @gunnarmorling
What We Didn’t Talk About...
New Language Features
#Java17APIs @gunnarmorling
● Shenandoah GC
● Improvements to native GraalVM binaries
○ JFR support
○ Debug symbols
● AArch64/Linux port; project Lilliput
● Persistent memory support (JEP 352, mashona.io)
● Supported OpenJDK distribution
Red Hat & OpenJDK
Past and Current Contributions
#Java17APIs @gunnarmorling
● JEP Search
https://chriswhocodes.com/jepsearch.html
● Blog (Vector API, JFR Event Streaming,
AppCDS, etc.)
https://www.morling.dev/
● JfrUnit
https://github.com/moditect/jfrunit
● Red Hat build of OpenJDK
https://developers.redhat.com/products/openjdk/overview
Resources
#Java17APIs @gunnarmorling
Q&A
gunnar@hibernate.org
@gunnarmorling
📧
Contact
To the moon and beyond with Java 17 APIs! | DevNation Tech Talk

To the moon and beyond with Java 17 APIs! | DevNation Tech Talk