Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java 17 Release

Java 17 Release

Hendrik Ebbers

September 17, 2021
Tweet

More Decks by Hendrik Ebbers

Other Decks in Programming

Transcript

  1. Safe Harbor Statement The following is intended to outline our

    general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  2. This is a very very very long gag @wol fl

    ook @hendrikEbbers Wolfgang Weigend • Wolfgang Weigend • Master Principal Solution Engineer • Global Java Team • Java Technology & GraalVM 
 Architecture
  3. This is a very very very long gag @wol fl

    ook @hendrikEbbers Hendrik Ebbers • Karakun Co-Founder • Founder of JUG Dortmund • JSR EG member • JavaOne Rockstar, Java Champion • AdoptOpenJDK / Adoptium TSC member
  4. This is a very very very long gag @wol fl

    ook @hendrikEbbers Hendrik Ebbers • I (and collect) boardgames • I STARWARS • I Hardrock • I Dogs
  5. Wer von euch hat wohl das älteste JAVA Programm? TagebuchApplet.java

    AWTodo_v45.java 
 MyFirstStrutsAction.java [email protected] https://cyberland.ijug.eu
  6. Heute Abend gehts AB!!1!! 19:00 nur echt auf YouTube ...

    wenn YouTube klappt * * https://cyberland.ijug.eu
  7. This is a very very very long gag @wol fl

    ook @hendrikEbbers Content • History recall • OpenJDK • Java release model • Java Features • Migration • Future of OpenJDK
  8. This is a very very very long gag @wol fl

    ook @hendrikEbbers The wild 90th • "Oak" (Object Application Kernel) / "The Green Project" was developed in 1992 • This project evolved to Java in 1995 • The Duke was already the 
 mascot for the 
 Green Project
  9. This is a very very very long gag @wol fl

    ook @hendrikEbbers The fi rst Java years • Java versions 1 till 6 were released at SUN • Java 1 was released 1996 • Java 6 was released 2006 • In 1998 the JCP (Java Community 
 Process) was formed
  10. This is a very very very long gag @wol fl

    ook @hendrikEbbers The takeover • In 2009 SUN was bought by Oracle • The Java community was really 
 afraid about this move • Mostly no-one associated Oracle with 
 open source
  11. JavaOne 2009 “Based on the foundation created here at Sun,

    we have invested heavily, and I think 
 we’re going to continue to invest and accelerate our investment”
  12. JavaOne 2009 “Java was a very attractive platform for us

    because it was open, and it allowed us to extend the platform”
  13. This is a very very very long gag @wol fl

    ook @hendrikEbbers Java getting old? • Big plans at SUN • Realisation at Oracle splitter in 2 
 releases • JDK 7 (Security) • JDK 8 (Lambdas & Streams)
  14. This is a very very very long gag @wol fl

    ook @hendrikEbbers Not your daddies Java • Functional programming FTW • Lambdas & Streams everywhere • Modularization of the JDK • Modularization of libs & apps • Keep up with the languages Dad Duke 2005
  15. This is a very very very long gag @wol fl

    ook @hendrikEbbers The last years • Oracle managed to provide 
 major updates of Java • Continued to evolve Java by the JCP • Not everything is perfect but 
 much better than it was expected
  16. This is a very very very long gag @wol fl

    ook @hendrikEbbers Java History Milestones Java initiated as research project at Sun Java powers the web; bundled with the Netscape browser Java becomes #1 programming language for enterprise applications Sun open sources Java 1991 1995 1999 2006 Java 7 – extending JVM to dynamic programming languages Java 9 – modular Java Java 14 and Java 15 2011 2017 2020 Oracle acquires Sun 2009 Java 10 – start of predictable release cadence 2018
  17. This is a very very very long gag @wol fl

    ook @hendrikEbbers Java in a nutshell Standard APIs Tools JVM
  18. This is a very very very long gag @wol fl

    ook @hendrikEbbers The JVM • The "heart" of the Java platform • De fi nition of Java language features • De fi nition of Java runtime • Since 2000 just-in-time-compilation (HotSpot)
  19. This is a very very very long gag @wol fl

    ook @hendrikEbbers The standard APIs • Java Class Library (JCL) is a set of dynamically loadable libraries • Will be called at runtime • Almost entirely written in Java (some JNI calls to hardware & OS)
  20. This is a very very very long gag @wol fl

    ook @hendrikEbbers The standard APIs • Since Java 9 the standard APIs are separated in several modules java.se java.sql.rowset java.sql java.xml java.base java.logging java.instrument java.datatransfer java.scripting java.prefs java.desktop java.xml.crypto java.compiler java.rmi java.naming java.security.sasl java.management java.security.jgss
  21. This is a very very very long gag @wol fl

    ook @hendrikEbbers The (evil) private APIs • Java contains some private Java APIs • This APIs should not be used in framework / application code • Private APIs can be changed at anytime
  22. This is a very very very long gag @wol fl

    ook @hendrikEbbers The (evil) private APIs • Some rules about private APIs • Do not use anything besides the java.* package • Swing and Graphics2D is located in the javax.* package • JavaFX is located in the javafx.* package
  23. This is a very very very long gag @wol fl

    ook @hendrikEbbers The (evil) private APIs • JDK 9 till JDK 15 defaults to --illegal-access=warn • JDK 16 defaults to --illegal-access=deny • JDK 17 disables permit, warn & debug values for illegal- access option • It is still possible to use --add-opens or the Add-Opens manifest attribute
  24. This is a very very very long gag @wol fl

    ook @hendrikEbbers The tools • Each Java distribution contains a large set of tools • Some are part of OpenJDK • Some are vendor speci fi c
  25. This is a very very very long gag @wol fl

    ook @hendrikEbbers The tools • Basic tools like the java or javac command are part of each JDK distribution • Oracle added several tools to its Java distribution that are not part of OpenJDK • All this tools were developed closed source at Oracle
  26. This is a very very very long gag @wol fl

    ook @hendrikEbbers The tools • A good example is "Java WebStart" • WebStart was never part of OpenJDK and therefore was never part of OpenJDK builds • WebStart was only delivered with Oracle JDK builds
  27. This is a very very very long gag @wol fl

    ook @hendrikEbbers Oracle JDK & OpenJDK OpenJDK 8 JVM, tools, etc. JVM, tools, etc. Exclusive Oracle stu f eg. Flight recorder WebStart Mission Control Oracle JDK 8
  28. This is a very very very long gag @wol fl

    ook @hendrikEbbers Java getting old? OpenJDK 12 Oracle JDK 12 JVM, tools, etc. equals JVM, tools, etc.
  29. This is a very very very long gag @wol fl

    ook @hendrikEbbers Oracle JDK & OpenJDK • Oracle wants to have the content of Oracle JDK (more or less) be equal to OpenJDK • Therefore Oracle contributed some of the previews content of Oracle JDK to OpenJDK • Tools like Flight Recorder were open sourced
  30. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK • Java has been open sourced 
 in 2006 • SUN derived OpenJDK from 
 SunJDK as a vendor JDK • Oracle JDK is derived from OpenJDK • Oracle took over the work at 
 OpenJDK and many companies 
 followed...
  31. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Groups & Projects Core Libraries Group 2D Graphics Group HotSpot Group OpenJFX Project JDK Project Panama Project
  32. This is a very very very long gag @wol fl

    ook @hendrikEbbers Contribution to OpenJDK • Since OpenJDK is an open source project everybody can contribute • Both individuals and companies contribute to OpenJDK • Oracle still does over 75% of all contributions for the OpenJDK
  33. This is a very very very long gag @wol fl

    ook @hendrikEbbers Contribution to OpenJDK • Happily more and more people of the Java community contribute to OpenJDK • Sadly Good tutorials and 'Getting started' guides are missing We are working on that issue
  34. This is a very very very long gag @wol fl

    ook @hendrikEbbers Companies that contributed in 11
  35. This is a very very very long gag @wol fl

    ook @hendrikEbbers Companies that contributed in 16
  36. This is a very very very long gag @wol fl

    ook @hendrikEbbers Companies that contribute • Alibaba • Amazon • Ampere Computing • ARM • Azul • Bellsoft • DataDog • Google • Huawai • IBM • Intel • JetBrains • Linaro • Longsoon • Microdoc • Microsoft • NTT Data • Qualcomm DCT • RedHat • SAP • Tencent • Twitter
  37. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Distributionen Azul Zulu Oracle JDK Amazon Coretto AdoptOpenJDK Bellsoft Liberica Red Hat Upstream Adoptium Temurin
  38. This is a very very very long gag @wol fl

    ook @hendrikEbbers Oracle Contributor Agreement • The following organizations and individuals have signed the OpenJDK Community TCK Agreement (OCTLA) and been granted access to the JCK * * * TCK - Test Compatibility Kit JCK - Java Compatibility Kit
  39. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK and Java Ownership • Java is a registered trademark of Oracle • OpenJDK is named independently • Access to the TCK is restricted • TCK access requires to sign the OCTLA
  40. This is a very very very long gag @wol fl

    ook @hendrikEbbers OCTLA Signatories List (Java 9+) • Amazon.com Services, Inc. • Ampere Computing LLC • Azul Systems, Inc. • BellSoft • Canonical • Eclipse.org Foundation • The FreeBSD Foundation • Fujitsu Limited • Fujitsu Technology Solutions GmbH • Greg Lewis • Hewlett Packard Enterprise • J-Class Solutions, Inc. • JetBrains s.r.o. • Loongson Technology Co., Ltd. • Marvell Semiconductor Inc. • MicroDoc Software GmbH • Microsoft • NCIT UNIPRO, LLC. • OpenLogic, Inc. • Red Hat • Sage Embedded Software LLC • SAP • SUSE Linux GmbH • Tencent Technology (Shenzhen) Co Ltd • Twitter • VMWare • Waratek Limited
  41. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK and Java Ownership • OpenJDK or substantially projects only • OCTLA did not allow to disclose TCK information to Non-OCTLA licensees • OCTLA is not a trademark license • OpenJDK could be used according to the OpenJDK Trademark Notice
  42. This is a very very very long gag @wol fl

    ook @hendrikEbbers The classical Java releases • Up until Java 8 we had a fl exible release train for Java • A new major version was released "when it's done" • This ended in delays and a a big bundle of new features per release
  43. This is a very very very long gag @wol fl

    ook @hendrikEbbers The classical Java releases • A version was available for several years • Normally a version received updates even after the next version was released • Commercial LTS support was provided by Oracle for legacy projects
  44. This is a very very very long gag @wol fl

    ook @hendrikEbbers Oracle Java roadmap 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 Java 6 Java 7 Java 8 Free
  45. This is a very very very long gag @wol fl

    ook @hendrikEbbers Oracle Java roadmap 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 Java 6 Java 7 Java 8 Free Commercial
  46. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train • Beginning with Java 9 Oracle announced the new release train • More fl exible with fi xed release dates • A feature will be released "when it's done" • Shorter lifetime of Java versions
  47. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train Java 9 Java 10 Java 11 Java 12 Java 13 Java 14 2018 2019 2020 Java 8 Basic version LTS version
  48. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train Java 9 Java 10 Java 11 Java 12 Java 13 Java 14 2018 2019 2020 Java 8 free version commercial version Some vendors provide LTS for production only by support subscription
  49. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train free version Preferred for LTS Java 9 Java 10 Java 11 Java 12 Java 13 Java 14 2018 2019 2020 Java 8 Java 15 Java 16 Java 17 Java 18 Java 19 Java 20 Java 21 Java 22 2021 2022 2023 Java 23 Java 24 Java 25 2024
  50. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train (Oracle) • Starting with Java 11 Oracle provides 2 Java builds • Oracle JDK is the commercial distribution • Oracle OpenJDK builds still provided under GPL with classpath exception
  51. This is a very very very long gag @wol fl

    ook @hendrikEbbers Oracle JDK distribution Java 9 Java 10 Java 11 Java 12 Java 13 Java 14 Java 15 2018 2019 2020 Java 8 Free Commercial LTS Not Free in Prod
  52. This is a very very very long gag @wol fl

    ook @hendrikEbbers Oracle OpenJDK distribution Java 9 Java 10 Java 11 Java 12 Java 13 Java 14 Java 15 2018 2019 2020 Java 8 Free
  53. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train • At the end the OpenJDK only de fi nes the major releases • Every vendor can provide distributions, LTS and support based on individual needs • Azul for example provides Medium-Term-Support (MTS) for some versions like Java 13 or 15
  54. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train • Next to the new timeline the new release model added some additional points • Deprecated code was removed from Java • @Deprecated has additional information
  55. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train A value of true indicates intent to remove the annotated program element in a future version. @Deprecated(forRemoval = true)
  56. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train • Several APIs were already removed between Java 8 and Java 11: • CORBA • JAXB • Java Enterprise Annotations
  57. This is a very very very long gag @wol fl

    ook @hendrikEbbers The new release train • Since Java will become more fl exible the users of Java need to become more fl exible, too • Based on the changes dependencies and application code need to be checked for a new version • Updates should be done more often
  58. This is a very very very long gag @wol fl

    ook @hendrikEbbers Security issues • The main reason for updates are security updates • Java contains security vulnerabilities • Several exploitable security issues are fi xed each year
  59. This is a very very very long gag @wol fl

    ook @hendrikEbbers Security issues • About 100 exploitable security issues were fi xed in 2018 Jul 2018 Oct 2017 Jan 2018 Apr 2018 40 20 60 Okt 2018 Exploit not published Exploit is available
  60. This is a very very very long gag @wol fl

    ook @hendrikEbbers Security issues • Let's Hack if(isJava6BeforeUpdate32()) { callExploitCve2013XXXX(); } else if(isJava7BeforeUpdate10) { callExploitCve2013YYYY(); } SecurityManager.setSecurityManager(null); copyMyBadByteArrayToExeInTempFolder(); executeExeInTempFolder();
  61. This is a very very very long gag @wol fl

    ook @hendrikEbbers Security issues • The main reason for updates are security updates • Java contains security vulnerabilities • Several exploitable security issues are fi xed each year More Information: https://bit.ly/2XfI0c4
  62. This is a very very very long gag @wol fl

    ook @hendrikEbbers Commercial support • Several companies offer commercial support for Java • Normally this contains LTS versions of speci fi c Java versions • All companies share [more or less] the same work fl ow
  63. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Work fl ow • Let's have a look how such issues are fi xed in Java • Since the OpenJDK is the open source repository of Java the issues will normally be fi xed here
  64. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Work fl ow OpenJDK New feature Security fi x
  65. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Work fl ow 8 9 OpenJDK New feature Security fi x
  66. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Work fl ow 8 9 OpenJDK New feature Security fi x Public (free) lifetime of Java 8
  67. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Work fl ow 8 9 Vendor B Vendor A OpenJDK New feature Security fi x
  68. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Work fl ow 8 9 Vendor B Vendor A OpenJDK Commercial LTS support for Java 8 New feature Security fi x
  69. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Work fl ow 8 9 Vendor B Vendor A OpenJDK New feature Security fi x Commercial LTS support for Java 8
  70. This is a very very very long gag @wol fl

    ook @hendrikEbbers Temurin by Adoptium • Eclipse Adoptium is the successor of AdoptOpenJDK 
 
 
 

  71. This is a very very very long gag @wol fl

    ook @hendrikEbbers Temurin by Adoptium • Eclipse Adoptium is the successor of AdoptOpenJDK 
 
 
 • Adoptium is top level project of Eclipse Foundation
  72. This is a very very very long gag @wol fl

    ook @hendrikEbbers Temurin by Adoptium • Eclipse Adoptium is the successor of AdoptOpenJDK 
 
 
 • Adoptium WG is based on leaders of the ecosystem
  73. This is a very very very long gag @wol fl

    ook @hendrikEbbers Temurin by Adoptium • Eclipse Adoptium is the successor of AdoptOpenJDK 
 
 
 • Eclipse Adoptium provides an OpenJDK distribution • That distribution is called Temurin
  74. This is a very very very long gag @wol fl

    ook @hendrikEbbers Temurin by Adoptium • Eclipse Adoptium is the successor of AdoptOpenJDK 
 
 
 https://adoptium.net
  75. This is a very very very long gag @wol fl

    ook Temurin by Adoptium OpenJDK Sources Temurin Installer Binaries / Distribution ci.adoptopenjdk.net (ci.adoptium.net in near future) adoptium.net github.com/adoptium/installer github.com/adoptium/jdk github.com/adoptium/jdk8u Build / CI Infrastructure github.com/adoptium/temurin8-binaries/releases github.com/adoptium/temurin11-binaries/releases github.com/adoptium/temurin16-binaries/releases github.com/adoptium/temurin17-binaries/releases Platform Builds AQAvit github.com/adoptium/temurin-build github.com/adoptium/aqa-tests * * Redirect to
  76. This is a very very very long gag @wol fl

    ook @hendrikEbbers Why not 'Eclipse AdoptOpenJDK' ? • The answer is quite simple: 
 
 
 
 
 • The Eclipse Foundation trademarks all names and 'AdoptOpenJDK' is just not trademark able OpenJDK Java ™ ™
  77. This is a very very very long gag @wol fl

    ook @hendrikEbbers Just call the distro 'Adoptium' ... • NO! Adoptium is much more than 'just the binaries': AQAVIT is the quality and runtime branding evaluation project for Java SE runtimes and associated technology. Any Java runtime Open source AQAVIT test & benchmark suite Enterprise ready runtime https://bit.ly/3nnLVi7 More Info:
  78. This is a very very very long gag @wol fl

    ook @hendrikEbbers Just call the distro 'Adoptium' ... • NO! Adoptium is much more than 'just the binaries': We want to create a good landing page for OpenJDK and Java Newcomer
  79. This is a very very very long gag @wol fl

    ook @hendrikEbbers Just call the distro 'Adoptium' ... • NO! We want to be convenient: 
 
 Like ___________ provides ___________ the Adoptium project provides Temurin Azul Systems Zulu Amazon Coretto Bellsoft Liberica Oracle Oracle JDK
  80. This is a very very very long gag @wol fl

    ook @hendrikEbbers Just call the distro 'Adoptium' ... • NO! Adoptium is much more than 'just the binaries': Community
  81. This is a very very very long gag @wol fl

    ook @hendrikEbbers Why 'Temurin' ? TEMURIN • The answer is quite simple: 
 
 
 
 

  82. This is a very very very long gag @wol fl

    ook • The answer is quite simple: 
 
 
 
 
 @hendrikEbbers Why 'Temurin' ? N N N N O H3 C CH3 CH3 O N N N N O H3 C CH3 CH3 O CH3 O Caffeine Temurin
  83. This is a very very very long gag @wol fl

    ook @hendrikEbbers Other distributions • Several companies provide OpenJDK based distributions based on different reasons: • Some wants to sell LTS support • Some wants to provide it bundled with products • Some wants to use it in the company cloud • ...
  84. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK Distributionen Azul Zulu Oracle JDK Amazon Coretto AdoptOpenJDK Bellsoft Liberica Red Hat Upstream Adoptium Temurin
  85. This is a very very very long gag @wol fl

    ook @hendrikEbbers Other distributions • It is really hard to choose a distribution... • Adoptium tries to help the user by providing a marketplace • The Adoptium marketplace will only contain distributions that are TCK and AQAvit approved
  86. This is a very very very long gag @wol fl

    ook @hendrikEbbers Adoptium Marketplace Mockup
  87. This is a very very very long gag @wol fl

    ook @hendrikEbbers JDK Features • All features of new Java releases are de fi ned by JDK Enhancement Proposals (JEP) of the OpenJDK • De fi nitions of JEPs and the feature lists of a Java release can be found at the OpenJDK • JEP URL: https://openjdk.java.net/jeps/395 • Release URL: https://openjdk.java.net/projects/jdk/16/
  88. This is a very very very long gag @wol fl

    ook @hendrikEbbers JEP De fi nitions • The JEP de fi nition and work fl ow is de fi ned by JEPs: • JEP 0 contains an up-to-date index of all JEPs • JEP 1 & JEP 2 de fi nes the content and work fl ows of JEPs • JEP 3 de fi nes the release process of the JDK
  89. This is a very very very long gag @wol fl

    ook @hendrikEbbers JEP Work fl ow
  90. This is a very very very long gag @wol fl

    ook @hendrikEbbers JEP De fi nitions • A Java release can contain JEPs as previews or in incubator mode: • JEP 11 de fi nes incubator mode • JEP 12 de fi nes preview mode
  91. This is a very very very long gag @wol fl

    ook @hendrikEbbers Preview Features $ javac HelloWorld.java 
 
 $ javac --release 14 --enable-preview HelloWorld.java $ java --enable-preview HelloWorld Enable all preview features of JDK 14 Run with all preview features of JDK 14
  92. This is a very very very long gag @wol fl

    ook @hendrikEbbers JEP Count by Release Java 8 Java 9 Java 11 Java 12 Java13 Java 14 Java 15 0 10 20 30 40 50 60 70 80 90 100 50+ 90+ 17 8 5 16 14 3+ years per release 6 month per release Java 16 17 Java 17 14
  93. This is a very very very long gag @wol fl

    ook @hendrikEbbers JDK 12 Features • 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) • 230: Microbenchmark Suite • 325: Switch Expressions (Preview) • 334: JVM Constants API • 340: One AArch64 Port, Not Two • 341: Default CDS Archives • 344: Abortable Mixed Collections for G1 • 346: Promptly Return Unused Committed Memory from G1
  94. This is a very very very long gag @wol fl

    ook @hendrikEbbers JDK 13 Features • 350: Dynamic CDS Archives • 351: ZGC: Uncommit Unused Memory • 353: Reimplement the Legacy Socket API • 354: Switch Expressions (Preview) • 355: Text Blocks (Preview)
  95. This is a very very very long gag @wol fl

    ook @hendrikEbbers JDK 14 Features • 305: Pattern Matching for instanceof (Preview) • 343: Packaging Tool (Incubator) • 345: NUMA-Aware Memory Allocation for G1 • 349: JFR Event Streaming • 352: Non-Volatile Mapped Byte Buffers • 358: Helpful NullPointerExceptions • 359: Records (Preview) • 361: Switch Expressions (Standard) • 362: Deprecate the Solaris and SPARC Ports • 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector • 364: ZGC on macOS • 365: ZGC on Windows • 366: Deprecate the ParallelScavenge + SerialOld GC Combination • 367: Remove the Pack200 Tools and API • 368: Text Blocks (Second Preview) • 370: Foreign-Memory Access API (Incubator)
  96. This is a very very very long gag @wol fl

    ook @hendrikEbbers Helpful NullPointerExceptions Exception in thread "main" java.lang.NullPointerException: Cannot assign field "i" because "a" is null at Prog.main(Prog.java:5) Exception in thread "main" java.lang.NullPointerException: Cannot read field "c" because "a.b" is null at Prog.main(Prog.java:5) •
  97. This is a very very very long gag @wol fl

    ook @hendrikEbbers JDK 15 Features • 339: Edwards-Curve Digital Signature Algorithm (EdDSA) • 360: Sealed Classes (Preview) • 371: Hidden Classes • 372: Remove the Nashorn JavaScript Engine • 373: Reimplement the Legacy DatagramSocket API • 374: Disable and Deprecate Biased Locking • 375: Pattern Matching for instanceof (Second Preview) • 377: ZGC: A Scalable Low-Latency Garbage Collector • 378: Text Blocks • 379: Shenandoah: A Low-Pause-Time Garbage Collector • 381: Remove the Solaris and SPARC Ports • 383: Foreign-Memory Access API (Second Incubator) • 384: Records (Second Preview) • 385: Deprecate RMI Activation for Removal
  98. This is a very very very long gag @wol fl

    ook @hendrikEbbers Text Blocks void writeHTML() { String html = """ <html> <body> <p>Hello World.</p> </body> </html> """; writeOutput(html); }
  99. This is a very very very long gag @wol fl

    ook @hendrikEbbers JDK 16 Features • 394: Pattern Matching for instanceof • 395: Records • 376: ZGC: Concurrent Thread-Stack Processing • 387: Elastic Metaspace • 380: Unix-Domain Socket Channels • 392: Packaging Tool • 396: Strongly Encapsulate JDK Internals by Default • 390: Warnings for Value-Based Classes • 397: Sealed Classes (Second Preview) • 338: Vector API (Incubator) • 389: Foreign Linker API (Incubator) • 393: Foreign-Memory Access API (Third Incubator) • 347: Enable C++14 Language Features • 357: Migrate from Mercurial to Git • 369: Migrate to GitHub • 386: Alpine Linux Port • 388: Windows/AArch64 Port
  100. This is a very very very long gag @wol fl

    ook @hendrikEbbers Vector API a = b + c * z[i+0] a b c z[i+0] d = e + f * z[i+1] d e f z[i+1] r = s + t * z[i+2] r s t z[i+2] u = v + w * z[i+3] u v w z[i+3] Old approach With Vector API = + SIMD * SIMD four multiplications four additions four assignments One SIMD multiplications One SIMD additions One assignments * * SIMD = Single Instruction Multiple Data *
  101. This is a very very very long gag @wol fl

    ook @hendrikEbbers JDK 17 Features • 409: Sealed Classes • 406: Pattern Matching for Switch (Preview) • 356: Enhanced Pseudo-Random Number Generators • 382: New macOS Rendering Pipeline • 415: Context-Speci fi c Deserialization Filters • 412: Foreign Function & Memory API (Incubator) • 414: Vector API (Second Incubator) • 403: Strongly Encapsulate JDK Internals • 306: Restore Always-Strict Floating-Point Semantics • 411: Deprecate the Security Manager for Removal • 398: Deprecate the Applet API for Removal • 407: Remove RMI Activation • 410: Remove the Experimental AOT and JIT Compiler • 391: macOS/AArch64 Port
  102. This is a very very very long gag @wol fl

    ook @hendrikEbbers New macOS Rendering Pipeline • Implement a Java 2D internal rendering pipeline for macOS using the Apple Metal API • Alternative to the existing pipeline, which uses the deprecated Apple OpenGL API Apple deprecated the OpenGL rendering library in September 2018
  103. This is a very very very long gag @wol fl

    ook @hendrikEbbers macOS/AArch64 Port • Apple has announced a long-term plan to transition their line of Macintosh computers from x64 to AArch64 (ARM) • Native support added to OpenJDK Apple M1 chip for example No Rosetta 2 usage anymore
  104. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK at Git • JavaFX was the fi rst project of the OpenJDK that has been migrated to git & GitHub • With project Skara the OpenJDK is moved to git & GitHub https://github.com/openjdk/jfx
  105. This is a very very very long gag @wol fl

    ook @hendrikEbbers OpenJDK at Git • Since OpenJDK projects are now hosted at GitHub contribution is super easy • Every GitHub user can create a PR (+ some paperwork to have you checked as a valid OpenJDK commiter)
  106. This is a very very very long gag @wol fl

    ook @hendrikEbbers All OS Builds with GitHub Actions • OpenJDK projects already use GitHub Actions for CI tasks • Automatically build and test JavaFX on all 3 big operation systems for each pull request https://github.com/openjdk/jfx/pull/619/checks
  107. This is a very very very long gag @wol fl

    ook @hendrikEbbers Issue tracker is still untouched • The Java issue tracker has not changed with project Skara • OpenJDK Bug Tracker is still Jira based on not directly writeable by endusers
  108. This is a very very very long gag @wol fl

    ook @hendrikEbbers Issue tracker is still untouched • Oracle provides hard to handle solution • If you want to follow me 
 (Hendrik) down the rabbit hole: 
 
 https://bit.ly/3nnJdsX
  109. This is a very very very long gag @wol fl

    ook @hendrikEbbers Migrating to JDK 17 • Oracle provides a migration guide: • Signi fi cant Changes in the JDK • Preparing For Migration • Migrating From JDK 8 to Later JDK Releases https://docs.oracle.com/en/java/javase/17/migrate/index.html https://bit.ly/3k224YD
  110. This is a very very very long gag @wol fl

    ook @hendrikEbbers Migrating to JDK 17 • Download JDK 17 • Run your program before recompiling • Update 3rd-party libraries • Compile your application if needed • Run jdeps on your code
  111. This is a very very very long gag @wol fl

    ook @hendrikEbbers Check removed APIs • The Java Version Almanac contains all information that you need • Open source service by Mark Hoffmann • Support any 2 releases https://javaalmanac.io/jdk/17/apidiff/11/ https://bit.ly/3z2Bqmv
  112. This is a very very very long gag @wol fl

    ook @hendrikEbbers Missing tools • You might miss some tools • WebStart and Applet support is gone • Check open source solution at openwebstart.com
  113. This is a very very very long gag @wol fl

    ook @hendrikEbbers Deprecated for Removal in 17 • Applet API (JEP 398) • No Web browser supports Applets anymore • Security Manager (JEP 411) • Was used extensively for running applets in a sandbox • Not been the primary means of securing client-side Java code for many years • Rarely been used to secure server-side Java code
  114. This is a very very very long gag @wol fl

    ook @hendrikEbbers Removed in JDK 17 • RMI Activation (JEP 407) • Deprecated for removal since JDK 15 • Experimental AOT and JIT Compiler (JEP 410) • AOT was an experimental feature shipped introduced with JDK 9 • GraalVM JIT Compiler was an experimental feature introduced with JDK 10 • Was not included with JDK 16
  115. This is a very very very long gag @wol fl

    ook @hendrikEbbers JavaFX Migration • JavaFX was part of Java 8 binaries by several vendors like Oracle or Azul • For Java 11 the best practice is to handle JavaFX like any other dependency • Good tutorials for Maven & Gradle can be found at https://openjfx.io/openjfx-docs/ https://bit.ly/2XdV41D
  116. This is a very very very long gag @wol fl

    ook @hendrikEbbers Check for usage of private API • We can't say that often enough • Check your code for any usage • Many online resources for individual issues ... or consultancy
  117. This is a very very very long gag @wol fl

    ook @hendrikEbbers Migrating to a different Vendor • Maybe you want to migrate to a different OpenJDK based distribution • Since all are based on OpenJDK and mostly all are TCK checked a switch should be super easy... you do Have a support subscription for Java versions in production ? As you can imagine there are exceptions...
  118. This is a very very very long gag @wol fl

    ook @hendrikEbbers Migrating to a different Vendor • There are still some minor differences distributions • As an example Oracle JDK uses a different font in Swing than the OpenJDK does • Adoptium provides an migration guide: 
 https://adoptium.net/migration.html https://bit.ly/3tBroI1
  119. This is a very very very long gag @wol fl

    ook @hendrikEbbers Modular Development with JDK 17
  120. This is a very very very long gag @wol fl

    ook @hendrikEbbers Additional resources • You can fi nd many good resources online • ... sadly not all are 100% correct • Good starting points: https://docs.microsoft.com/en-us/java/openjdk/transition-from-java-8-to-java-11 https://bit.ly/3tBroI1 https://nipafx.dev/java-11-migration-guide/ https://bit.ly/3C3aTY9
  121. This is a very very very long gag @wol fl

    ook @hendrikEbbers GraalVM GraalVM Community is available for free for any use. It is built from the GraalVM sources available on GitHub. We provide pre-built binaries for Linux/ X86, Linux/ARM, macOS, and Windows platforms on x86 64-bit systems. Support for the Windows and Linux/ARM platforms, and the Python, Ruby and R languages is experimental. Note GraalVM Community Edition contains significant technology from other projects including OpenJDK and Node.js which are not maintained by the GraalVM community. GraalVM Enterprise Edition is recommended for production applications. GraalVM Enterprise provides additional performance, security, and scalability relevant for running applications in production. You can get a version of GraalVM Enterprise that is free for evaluation and developing new applications via the Oracle Technology Network (OTN), or a commercially licensed version for production use via the Oracle Store. We provide binaries for Linux, macOS, and Windows platforms on x86 64-bit systems. Support for the Windows and Linux/ARM platforms, and the Python, Ruby and R languages is experimental. Enterprise Edition Community Edition
  122. This is a very very very long gag @wol fl

    ook @hendrikEbbers GraalVM • Unlike OpenJDK the GraalVM is a full Oracle product • BUT: GraalVM is open source • BUT: GraalVM community edition is available • BUT: Advisory Board contains multiple companies https://www.graalvm.org/community/advisory-board/
  123. This is a very very very long gag @wol fl

    ook @hendrikEbbers Key Java Platform Investments • Security & Vulnerability • Approachability & Continued language enhancements • Cloud Containers & Observability • Data optimization & Density • Predictability at Scale • Performance & Ef fi ciency • Hardware Acceleration (GPU, NVM, etc.)