Slide 1

Slide 1 text

To the Moon and Beyond With Java 17 APIs! Gunnar Morling Software Engineer, Red Hat @gunnarmorling

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

#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

Slide 5

Slide 5 text

The Vector API 1 JFR Event Streaming 2 3 The Foreign Linker API

Slide 6

Slide 6 text

#Java17APIs @gunnarmorling ● Projects ○ Debezium ○ Quarkus ○ Hibernate ● MapStruct, JfrUnit, kcctl ● Java Champion ● @gunnarmorling Gunnar Morling Open Source Software Engineer at Red Hat

Slide 7

Slide 7 text

The Vector API 1

Slide 8

Slide 8 text

#Java17APIs @gunnarmorling The Vector API JEPs 338 / 414 / 417 java.util.Vector?!

Slide 9

Slide 9 text

#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

Slide 10

Slide 10 text

#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

Slide 11

Slide 11 text

#Java17APIs @gunnarmorling The Vector API Use Cases ● Image, text, signal processing ● Encryption ● Machine Learning ● etc.

Slide 12

Slide 12 text

#Java17APIs @gunnarmorling The Vector API Terminology

Slide 13

Slide 13 text

#Java17APIs @gunnarmorling The Vector API Example – Scalar c = -(a2 + b2)

Slide 14

Slide 14 text

#Java17APIs @gunnarmorling The Vector API Example – Vector

Slide 15

Slide 15 text

#Java17APIs @gunnarmorling The Vector API Example – Vector

Slide 16

Slide 16 text

#Java17APIs @gunnarmorling The Vector API Example – Vector

Slide 17

Slide 17 text

#Java17APIs @gunnarmorling The Vector API Example – Vector

Slide 18

Slide 18 text

#Java17APIs @gunnarmorling The Vector API Example – Vector

Slide 19

Slide 19 text

#Java17APIs @gunnarmorling The Vector API A Very Rich API

Slide 20

Slide 20 text

#Java17APIs @gunnarmorling The Vector API Example – FizzBuzz

Slide 21

Slide 21 text

#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)

Slide 22

Slide 22 text

#Java17APIs @gunnarmorling The Vector API Examining Assembly Code with Hsdis

Slide 23

Slide 23 text

#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

Slide 24

Slide 24 text

Detour Identifying JDK API Changes by Yourself

Slide 25

Slide 25 text

#Java17APIs @gunnarmorling Detour: Identifying API Changes javaalmanac.io

Slide 26

Slide 26 text

#Java17APIs @gunnarmorling Detour: Identifying API Changes github.com/AdoptOpenJDK/jdk-api-diff

Slide 27

Slide 27 text

#Java17APIs @gunnarmorling Detour: Identifying API Changes chriswhocodes.com/jepsearch.html

Slide 28

Slide 28 text

#Java17APIs @gunnarmorling Detour: Identifying API Changes JavaDoc ab Version 17

Slide 29

Slide 29 text

1 JFR Event Streaming 3 2 The Vector API The Foreign Linker API

Slide 30

Slide 30 text

#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

Slide 31

Slide 31 text

#Java17APIs @gunnarmorling Foreign Linker API Using Method Handle

Slide 32

Slide 32 text

#Java17APIs @gunnarmorling Foreign Linker API Using Method Handle

Slide 33

Slide 33 text

#Java17APIs @gunnarmorling Foreign Linker API Using Method Handle

Slide 34

Slide 34 text

#Java17APIs @gunnarmorling ● Provide or create header file ● Generate binding (Panama EA build required) Foreign Linker API jextract

Slide 35

Slide 35 text

#Java17APIs @gunnarmorling Foreign Linker API jextract

Slide 36

Slide 36 text

#Java17APIs @gunnarmorling Foreign Linker API github.com/sundararajana/panama-jextract-samples

Slide 37

Slide 37 text

Detour Removed APIs

Slide 38

Slide 38 text

#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 (ab Java 15), GraalJS

Slide 39

Slide 39 text

1 JFR Event Streaming 2 3 The Vector API The Foreign Linker API

Slide 40

Slide 40 text

#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

Slide 41

Slide 41 text

#Java17APIs @gunnarmorling JFR Event Types https://bestsolution-at.github.io/jfr-doc/

Slide 42

Slide 42 text

#Java17APIs @gunnarmorling JFR Event Streaming JEP 349 ● Processing JFR events in “real-time” ● Use Cases ○ Export to monitoring services ○ Performance tests (JfrUnit) ○ Predictive analytics

Slide 43

Slide 43 text

#Java17APIs @gunnarmorling JFR Event Streaming API

Slide 44

Slide 44 text

#Java17APIs @gunnarmorling JFR Event Streaming Out-of-process: github.com/flight-recorder/health-report

Slide 45

Slide 45 text

#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”

Slide 46

Slide 46 text

#Java17APIs @gunnarmorling JFR Event Streaming Asserting Socket IO with JfrUnit

Slide 47

Slide 47 text

#Java17APIs @gunnarmorling JFR Event Streaming Asserting Socket IO with JfrUnit

Slide 48

Slide 48 text

#Java17APIs @gunnarmorling JFR Event Streaming Asserting Socket IO with JfrUnit

Slide 49

Slide 49 text

#Java17APIs @gunnarmorling JFR Event Streaming Asserting Socket IO with JfrUnit

Slide 50

Slide 50 text

#Java17APIs @gunnarmorling JFR Event Streaming Asserting Socket IO with JfrUnit

Slide 51

Slide 51 text

#Java17APIs @gunnarmorling JFR Event Streaming Asserting Socket IO with JfrUnit

Slide 52

Slide 52 text

Detour AppCDS

Slide 53

Slide 53 text

#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?

Slide 54

Slide 54 text

#Java17APIs @gunnarmorling Detour: AppCDS Quarkus App – Time to First Response Hetzner Cloud CX4 (4 vCPUs, 16GB RAM)

Slide 55

Slide 55 text

#Java17APIs @gunnarmorling Detour: AppCDS Start-up Time of Apache Kafka

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

#Java17APIs @gunnarmorling Java 17 – An Update Well Worth It! Many Improvements Across the Board... Language API Runtime

Slide 58

Slide 58 text

#Java17APIs @gunnarmorling ● Shenandoah GC ● JFR support for native GraalVM binaries ● AArch64/Linux port ● Project Lilliput Red Hat & OpenJDK Multiple Contributions

Slide 59

Slide 59 text

#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 Resources

Slide 60

Slide 60 text

#Java17APIs @gunnarmorling Q&A gunnar@hibernate.org @gunnarmorling 📧 Contact

Slide 61

Slide 61 text

No content