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 defined 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