{"id":769,"date":"2022-10-08T23:33:31","date_gmt":"2022-10-08T21:33:31","guid":{"rendered":"http:\/\/ondro.inginea.eu\/?p=769"},"modified":"2023-06-25T15:22:09","modified_gmt":"2023-06-25T13:22:09","slug":"new-features-in-java-versions-since-java-8","status":"publish","type":"post","link":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/","title":{"rendered":"New features between Java 8 and Java 19"},"content":{"rendered":"\n<p>Since version 9, Java has new features every 6 months and it&#8217;s very hard to keep track of these new changes. Most of the information on the internet describes changes between the last 2 Java versions. However, if you&#8217;re in a similar situation as me, you&#8217;re not using one of the latest Java versions but a version several releases older. <\/p>\n\n\n\n<p>Then it&#8217;s useful to know which new features were added since the version you use now, or between the versions that you use now and the one you want to start using next. Therefore I&#8217;ve compiled a table with all new features added since Java 8 for each new Java version and I keep it updated for every newer Java version.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Below you can find tables for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#language-features\">New Java language features<\/a> &#8211; additions to the Java language or APIs<\/li>\n\n\n\n<li><a href=\"#language-features-preview\">New Java language features in preview\/incubation<\/a> &#8211; additions to the Java language or APIs which aren&#8217;t in their final state yet<\/li>\n\n\n\n<li><a href=\"#tools\">New tools and features in OpenJDK<\/a> &#8211; additions outside of the language, such as command line tools or JVM improvements<\/li>\n\n\n\n<li><a href=\"#removals\">Deprecated\/removed features and APIs<\/a><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Note that I didn&#8217;t include all the new features and API additions, only those that are useful for a wide range of developers, to keep the list brief.<\/p>\n<\/blockquote>\n\n\n\n<p>This article isn&#8217;t about choosing the right Java version for you to use. But I&#8217;ll at least summarize all the Java versions since Java 8 and for your convenience:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java 8 &#8211; LTS release (Long Term Support), last LTS release before JPMS (modules) were introduced in Java 9<\/li>\n\n\n\n<li>Java 11 &#8211; LTS release<\/li>\n\n\n\n<li>Java 17 &#8211; LTS release, the latest LTS release until September 2023<\/li>\n\n\n\n<li>Java 19 &#8211; non-LTS release, the latest version released in September 2022<\/li>\n\n\n\n<li>all other Java versions &#8211; non-LTS releases<\/li>\n<\/ul>\n\n\n\n<p>In most cases, you should only use LTS releases in production. That is unless you have specific needs to use the greatest and latest and are willing to upgrade to a new Java version every 6 months. To find out more about Java LTS releases, you can read <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/post\/java-long-term-support-lts\" target=\"_blank\" rel=\"noreferrer noopener\">The art of long-term support and what LTS means for the Java ecosystem<\/a> by Oracle. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"language-features\">Java language features and APIs<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"mtr-table mtr-tr-td\"><tbody><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Feature\/API<\/strong><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Since<\/strong><\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Preview  since<\/strong><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/408\" target=\"_blank\" rel=\"noreferrer noopener\">Simple Web Server<\/a> (a.k.a <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/18\/docs\/api\/jdk.httpserver\/com\/sun\/net\/httpserver\/SimpleFileServer.html\" target=\"_blank\" rel=\"noreferrer noopener\">com.sun.net.httpserver<\/a>.<a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/18\/docs\/api\/jdk.httpserver\/com\/sun\/net\/httpserver\/SimpleFileServer.html\" target=\"_blank\" rel=\"noreferrer noopener\">SimpleFileServer<\/a>)<br><code>SimpleFileServer.createFileServer(new InetSocketAddress(9000), path, logLevel).start();<\/code><br><br>Cmd Line: <code>jwebserver -p 9000<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">18<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/413\" target=\"_blank\" rel=\"noreferrer noopener\">Code Snippets in Java API Documentation<\/a><br><code>{@snippet : lines of code}<\/code> <br>instead of <code>&lt;pre&gt;{@code lines of code }&lt;\/pre&gt;<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">18<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/400\" target=\"_blank\" rel=\"noreferrer noopener\">UTF-8 by Default<\/a> \u2013 instead of the charset defined by the system. <br>Run <code>javac -encoding UTF-8<\/code> with JDK 8-17 to check for Java source encoding issues.<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">18<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/415\" target=\"_blank\" rel=\"noreferrer noopener\">Context-Specific Deserialization Filters<\/a> \u2013 allow applications to configure deserialization filters, either specify a pattern via a system property, or a filter factory via a system property or via <code>ObjectInputFilter.Config<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">17<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/409\" data-type=\"URL\" data-id=\"https:\/\/openjdk.java.net\/jeps\/409\" target=\"_blank\" rel=\"noreferrer noopener\">Sealed classes<\/a> (inheritance only for allowed classes):<br><code>public abstract sealed class Shape permits Circle, Rectangle, Square {...}<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">17<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">15<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/395\" target=\"_blank\" rel=\"noreferrer noopener\">Record type<\/a> \u2013 data classes with implicit getters, constructor, <code>equals<\/code>, <code>hashCode<\/code> and <code>toString<\/code> methods:<br><code>record Point(int x, int y) { }<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">16<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Static members in inner classes (part of <a href=\"https:\/\/openjdk.java.net\/jeps\/395\" target=\"_blank\" rel=\"noreferrer noopener\">Record type<\/a> JEP)<br><code>new Object() { <\/code><br><code>static record MyData(String data) {};<\/code><br><code>public static final int CONSTANT = 1;<\/code><br><code>};<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">16<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">16<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/394\" target=\"_blank\" rel=\"noreferrer noopener\">Pattern Matching for <code>instanceof<\/code><\/a>: <br><code>if (x instanceOf String s) { String a = s; }<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">16<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/378\" target=\"_blank\" rel=\"noreferrer noopener\">Text blocks<\/a>:<br><code>String query = \"\"\"<\/code><br><code>SELECT \"EMP_ID\", \"LAST_NAME\"<\/code><br><code>FROM \"EMPLOYEE_TB\";<\/code><br><code> \"\"\"<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">15<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">13<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">New String methods (<code><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/15\/docs\/api\/java.base\/java\/lang\/String.html#formatted(java.lang.Object...)\" target=\"_blank\" rel=\"noreferrer noopener\">formatted<\/a>, stripIndent, translateEscapes<\/code>)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">15<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/361\" target=\"_blank\" rel=\"noreferrer noopener\">Switch expressions<\/a>:<br><code>boolean isWeekend = switch (day) {   <\/code><br><code>case SATURDAY, SUNDAY -&gt; true;<\/code><br><code>default -&gt; false<\/code>;<br><code>};<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">12<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/www.baeldung.com\/java12-string-api\" target=\"_blank\" rel=\"noreferrer noopener\">New String methods<\/a> (<code>indent<\/code>, <code>transform<\/code>)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">12<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/12\/docs\/api\/java.base\/java\/text\/CompactNumberFormat.html\" target=\"_blank\" rel=\"noreferrer noopener\">CompactNumberFormat class<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">12<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/4comprehension.com\/java-11-string-api-updates\/\" target=\"_blank\" rel=\"noreferrer noopener\">New String methods<\/a> (<code>repeat<\/code>, <code>isBlank<\/code>, <code>strip<\/code>, <code>lines<\/code>)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/323\" target=\"_blank\" rel=\"noreferrer noopener\"><code>var<\/code> type allowed in Lambda Parameters<\/a>:<br><code>(@NonNull var x) -&gt; process(x)<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.net.http\/java\/net\/http\/HttpClient.html\" target=\"_blank\" rel=\"noreferrer noopener\">New HTTP client API<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/javase\/9\/docs\/api\/jdk\/incubator\/http\/HttpClient.html\">9<\/a><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/332\" target=\"_blank\" rel=\"noreferrer noopener\">TLS v1.3<\/a> \u2013 support for a new SSL\/TLS protocol version<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a rel=\"noreferrer noopener\" href=\"http:\/\/openjdk.java.net\/jeps\/286\" target=\"_blank\"><code>var<\/code> type allowed for local variables<\/a>:<br><code>var length = str.length();<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">10<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/dev.to\/ajiteshtiwari\/java-9-flow-api-4e38\" target=\"_blank\" rel=\"noreferrer noopener\">Flow API (reactive streams)<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/261\" target=\"_blank\" rel=\"noreferrer noopener\">Java Platform Module System (modules)<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/269\" target=\"_blank\" rel=\"noreferrer noopener\">Collection factory methods<\/a>:<br><code>List.of(a, b, c); Set.of(d, e, f, g);<\/code>  <code>Map.of(k1, v1, k2, v2)<\/code>;<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/www.javatpoint.com\/java-9-stream-api-improvement\" target=\"_blank\" rel=\"noreferrer noopener\">Stream API improvements<\/a> (<code>takeWhile<\/code>, <code>dropWhile<\/code>, <code>ofNullable<\/code>, <code>iterate<\/code> with condition)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/javase\/9\/docs\/api\/java\/awt\/image\/MultiResolutionImage.html\" target=\"_blank\" rel=\"noreferrer noopener\">Multi-Resolution Image API<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/259\" target=\"_blank\" rel=\"noreferrer noopener\">Stack-Walking API<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><code>this.getClass().getPackageName()<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/102\" target=\"_blank\" rel=\"noreferrer noopener\">Process API updates<\/a> (detailed info about processes, e.g. ID, onExit, destroy)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/grokonez.com\/java\/java-9\/java-9-completablefuture-api-improvements-delay-timeout-support\" target=\"_blank\" rel=\"noreferrer noopener\">new methods in CompletableFuture API<\/a> (<code>delay<\/code>, <code>timeout<\/code>)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/www.javatpoint.com\/java-9-interface-private-methods\" target=\"_blank\" rel=\"noreferrer noopener\">Interface private methods<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/277\" target=\"_blank\" rel=\"noreferrer noopener\"><code>since<\/code> and <code>forRemoval<\/code> in @Deprecated<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/www.javatpoint.com\/java-default-methods\" target=\"_blank\" rel=\"noreferrer noopener\">Interface Default and Static Methods<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/java\/javaOO\/methodreferences.html\" target=\"_blank\" rel=\"noreferrer noopener\">Method References<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/Optional.html\" target=\"_blank\" rel=\"noreferrer noopener\">Optional class<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/javase\/tutorial\/java\/javaOO\/lambdaexpressions.html\" target=\"_blank\" rel=\"noreferrer noopener\">Lambda expressions<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/function\/package-summary.html\" target=\"_blank\" rel=\"noreferrer noopener\">Functional interfaces<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/stream\/package-summary.html\" target=\"_blank\" rel=\"noreferrer noopener\">Stream API<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/jcp.org\/en\/jsr\/detail?id=335\" target=\"_blank\" rel=\"noreferrer noopener\">Effectively Final Variables<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/120\" target=\"_blank\" rel=\"noreferrer noopener\">Repeating Annotations<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/jcp.org\/en\/jsr\/detail?id=310\" target=\"_blank\" rel=\"noreferrer noopener\">New Date Time API <\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-group omnifish-advert has-white-color has-text-color has-background\" style=\"background-color:#0b8f9b\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile is-vertically-aligned-center has-white-color has-text-color\" style=\"grid-template-columns:auto 15%\"><div class=\"wp-block-media-text__content\">\n<p class=\"has-medium-font-size\"><a rel=\"noreferrer noopener\" href=\"https:\/\/omnifish.ee\" data-type=\"URL\" data-id=\"https:\/\/omnifish.ee\" target=\"_blank\"><strong>Need help with GlassFish, Jakarta\u00a0EE, Java in the cloud?<\/strong><\/a><\/p>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/omnifish.ee\" data-type=\"URL\" data-id=\"https:\/\/omnifish.ee\" target=\"_blank\">Follow me at <strong>OmniFish<\/strong>! <\/a><\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><a href=\"https:\/\/omnifish.ee\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"178\" data-attachment-id=\"1034\" data-permalink=\"https:\/\/ondro.inginea.eu\/omnifish-logo-transparent-400px\/\" data-orig-file=\"https:\/\/i0.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2022\/07\/omnifish-logo-transparent-400px.png?fit=400%2C237&amp;ssl=1\" data-orig-size=\"400,237\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"omnifish-logo-transparent-400px\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2022\/07\/omnifish-logo-transparent-400px.png?fit=300%2C178&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2022\/07\/omnifish-logo-transparent-400px.png?fit=400%2C237&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2022\/07\/omnifish-logo-transparent-400px.png?resize=300%2C178&#038;ssl=1\" alt=\"\" class=\"wp-image-1034 size-medium\" srcset=\"https:\/\/i0.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2022\/07\/omnifish-logo-transparent-400px.png?resize=300%2C178&amp;ssl=1 300w, https:\/\/i0.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2022\/07\/omnifish-logo-transparent-400px.png?w=400&amp;ssl=1 400w\" sizes=\"(max-width: 300px) 100vw, 300px\" data-recalc-dims=\"1\" \/><\/a><\/figure><\/div>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"language-features-preview\">Java language features or APIs in preview\/incubation<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"mtr-table mtr-tr-td\"><tbody><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Feature\/API<\/strong><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Since<\/strong><\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><strong>Preview  since<\/strong><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.org\/jeps\/425\" target=\"_blank\" rel=\"noreferrer noopener\">Virtual threads<\/a><br><code>Thread.startVirtualThread(runnable)<\/code>;<br><code>Thread.ofVirtual().name(\"duke\").unstarted(runnable);<\/code><br><code>Executors.newVirtualThreadPerTaskExecutor();<\/code><br><code>Executors.newThreadPerTaskExecutor(threadFactory); <\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">19<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.org\/jeps\/405\" target=\"_blank\" rel=\"noreferrer noopener\">Record patterns<\/a><br><code>record Point(int x, int y) {}<br>\u2026<br>if (o instanceof Point(int x, int y)) {<br>  System.out.println( x + y );<br>}<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">19<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/428\" target=\"_blank\" rel=\"noreferrer noopener\">Structured concurrency<\/a><br><code>try (var scope = new ShutdownOnFailure()) { <br>  Future&lt;String&gt; user = scope.fork(() -&gt; findUser());<br>  Future&lt;Integer&gt; order = scope.fork(() -&gt; fetchOrder());<br>}<br>\/\/both threads are terminated here, outside of try block <\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">19<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/427\" target=\"_blank\" rel=\"noreferrer noopener\">Pattern Matching for switch<\/a> \u2013 like <code>instanceof<\/code> for <code>switch<\/code>; <code>switch<\/code> is an expression and can be assigned<br><code>String result = switch (o) {<br>  case null -&gt; null;<\/code><br><code>  case 0 -&gt; throw new RuntimeException(\"Cannot be 0\"); \/\/ Special cases<\/code><br><code>  case Integer i when i &gt; 0 -&gt; \"Positive number\";<\/code><br><code>  case Integer i -&gt; \"Negative number\"; \/\/ 0 and positive numbers handled by above rules<br>  case String s -&gt; s;<br>  case Point p -&gt; p.toString();<br>  case int[] ia -&gt; \"Array length\" + ia.length;<br>  default -&gt; \"Something else\";<br>}<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">17<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.org\/jeps\/424\" target=\"_blank\" rel=\"noreferrer noopener\">Foreign Function &amp; Memory API<\/a> (an alternative to JNI)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">16<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature\/API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/426\" target=\"_blank\" rel=\"noreferrer noopener\">Vector API<\/a> \u2013 express computations that compile to optimal hardware instructions<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Preview  since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">16<\/div><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tools\">New JDK tools and features since OpenJDK 8<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"mtr-table mtr-tr-td\"><tbody><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Tool \/ feature<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Since<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Experimental since<\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/343\" target=\"_blank\" rel=\"noreferrer noopener\">Packaging Tool<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/318\" target=\"_blank\" rel=\"noreferrer noopener\">Epsilon (no-op) GC<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a rel=\"noreferrer noopener\" href=\"http:\/\/openjdk.java.net\/jeps\/317\" target=\"_blank\">Experimental Java-Based JIT Compiler<\/a> (Graal VM)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">10<\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/379\" target=\"_blank\" rel=\"noreferrer noopener\">Shenandoah GC<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">15<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">12<\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/15\/gctuning\/z-garbage-collector.html\" target=\"_blank\" rel=\"noreferrer noopener\">Z GC<\/a> (<a href=\"https:\/\/openjdk.java.net\/jeps\/377\" target=\"_blank\" rel=\"noreferrer noopener\">JEP 377<\/a>)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">15<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/358\" target=\"_blank\" rel=\"noreferrer noopener\">Helpful NullPointerExceptions<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/330\" target=\"_blank\" rel=\"noreferrer noopener\">Launching Java files as scripts<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/328\" target=\"_blank\" rel=\"noreferrer noopener\">Flight recorder<\/a> (data collection framework for troubleshooting)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/bugs.java.com\/bugdatabase\/view_bug.do?bug_id=JDK-8146115\" target=\"_blank\" rel=\"noreferrer noopener\">Docker Container Support:<\/a> <br><code>-XX:-UseContainerSupport<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">10,<br>8u191<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/bugs.java.com\/bugdatabase\/view_bug.do?bug_id=JDK-8186248\" target=\"_blank\" rel=\"noreferrer noopener\">Flexible heap size selection<\/a>:<br><code>-XX:MaxRAMPercentage<\/code><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">10, <br>8u191<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a rel=\"noreferrer noopener\" href=\"http:\/\/openjdk.java.net\/jeps\/310\" target=\"_blank\">Application Class-Data Sharing<\/a> (CDS)<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">10<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/282\" target=\"_blank\" rel=\"noreferrer noopener\">jlink<\/a> \u2013 custom JRE image, subset of JRE<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/222\" target=\"_blank\" rel=\"noreferrer noopener\">JShell (Java REPL)<\/a> \u2013 run Java commands interactively<\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/238\" target=\"_blank\" rel=\"noreferrer noopener\">Multi-Release JAR Files<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Tool \/ feature\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/254\" target=\"_blank\" rel=\"noreferrer noopener\">Compact Strings<\/a><\/div><\/td><td data-mtr-content=\"Since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Experimental since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"removals\">Deprecated\/removed features and APIs:<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"mtr-table mtr-tr-td\"><tbody><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Feature \/ API<\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Deprecated since<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">Removed since<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/421\" target=\"_blank\" rel=\"noreferrer noopener\">Deprecate Finalization for Removal<\/a> (<code>finalize()<\/code> and similar methods)<\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">18<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/411\" data-type=\"URL\" data-id=\"https:\/\/openjdk.java.net\/jeps\/411\" target=\"_blank\" rel=\"noreferrer noopener\">Deprecate the Security Manager for Removal<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">17<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/390\" target=\"_blank\" rel=\"noreferrer noopener\">Constructors of primitive wrapper classes<\/a> (e.g. <code>new Integer(1)<\/code>)<\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">16<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/366\" target=\"_blank\" rel=\"noreferrer noopener\">ParallelScavenge + SerialOld GC Combination<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/289\" target=\"_blank\" rel=\"noreferrer noopener\">Applet API<\/a> (<a href=\"https:\/\/openjdk.java.net\/jeps\/398\" target=\"_blank\" rel=\"noreferrer noopener\">Deprecated For Removal<\/a> in Java 17)<\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/407\" data-type=\"URL\" data-id=\"https:\/\/openjdk.java.net\/jeps\/407\" target=\"_blank\" rel=\"noreferrer noopener\">RMI Activation<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">15<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">17<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a rel=\"noreferrer noopener\" href=\"https:\/\/openjdk.java.net\/jeps\/403\" target=\"_blank\">Strongly Encapsulate JDK Internals<\/a> (except sun.misc.Unsafe and some more)<br>\u2013 internal JDK classes won\u2019t be available anymore<\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">17<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/335\" target=\"_blank\" rel=\"noreferrer noopener\">Nashorn JavaScript Engine<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">15<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/381\" target=\"_blank\" rel=\"noreferrer noopener\">Solaris and SPARC Ports<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">15<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">CMS GC<\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/367\" target=\"_blank\" rel=\"noreferrer noopener\">Pack200 Tools and API<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">14<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/www.infoworld.com\/article\/3305073\/removed-from-jdk-11-javafx-11-arrives-as-a-standalone-module.html\" target=\"_blank\" rel=\"noreferrer noopener\">Java FX<\/a> (moved to <a href=\"https:\/\/openjfx.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenJFX<\/a>)<\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase\/11-relnote-issues.html\" target=\"_blank\" rel=\"noreferrer noopener\">Java Web Start<\/a> (was only in Oracle JDK)<\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/320\" target=\"_blank\" rel=\"noreferrer noopener\">Java EE and CORBA modules<\/a> (JAX-WS, JAXB, JAF, Common Annotations, CORBA, JTA)<br>Look here to find <a href=\"https:\/\/stackoverflow.com\/questions\/48204141\/replacements-for-deprecated-jpms-modules-with-java-ee-apis\" target=\"_blank\" rel=\"noreferrer noopener\">replacements for the removed modules<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">11<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/313\" target=\"_blank\" rel=\"noreferrer noopener\">javah<\/a> <a href=\"http:\/\/openjdk.java.net\/jeps\/313\" target=\"_blank\" rel=\"noreferrer noopener\">Native-Header Generator<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">10<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/241\" target=\"_blank\" rel=\"noreferrer noopener\">jhat Heap Visualizer<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/231\" target=\"_blank\" rel=\"noreferrer noopener\">Launch-Time JRE Version Selection<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/220#Removed:-rt-jar-and-tools-jar\" target=\"_blank\" rel=\"noreferrer noopener\">rt.jar and tools.jar<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"https:\/\/openjdk.java.net\/jeps\/220#Removed:-The-extension-mechanism\" target=\"_blank\" rel=\"noreferrer noopener\">The extension mechanism (java.ext.dirs property)<\/a><\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><\/tr><tr><td data-mtr-content=\"Feature \/ API\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\"><a href=\"http:\/\/openjdk.java.net\/jeps\/214\" target=\"_blank\" rel=\"noreferrer noopener\">Rarely-Used GC Combinations<\/a> <\/div><\/td><td data-mtr-content=\"Deprecated since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">8<\/div><\/td><td data-mtr-content=\"Removed since\" class=\"mtr-td-tag\"><div class=\"mtr-cell-content\">9<\/div><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>For more details, the <a href=\"https:\/\/javaalmanac.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">javaalmanac.io\/<\/a> catalog is very useful to browse the changes in Java thoughout all its history. It can give you complete diff of APIs between selected Java versions, e.g. <a href=\"https:\/\/javaalmanac.io\/jdk\/11\/apidiff\/8\/\" target=\"_blank\" rel=\"noreferrer noopener\">between Java 8 and Java 11<\/a>. Very useful If you&#8217;re thinking about migrating to a specific Java version.<\/p>\n\n\n\n<p>D\u00e1vid Cs\u00e1kv\u00e1ri also wrote a similar article as mine for <a rel=\"noreferrer noopener\" href=\"https:\/\/advancedweb.hu\/a-categorized-list-of-all-java-and-jvm-features-since-jdk-8-to-16\/\" target=\"_blank\">new features between Java 8 and Java 17<\/a>, which is more detailed and with a lot of useful examples.<\/p>\n\n\n\n<p>If you want to get started with Java 17 quickly and try out all the new features, here&#8217;s a nice article to follow to get you started fast: <a href=\"https:\/\/examples.javacodegeeks.com\/java-17-new-features-tutorial\/\" target=\"_blank\" rel=\"noreferrer noopener\">Java 17 New Features Tutorial<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Since version 9, Java has new features every 6 months and it&#8217;s very hard to keep track of these new changes. Most of the information on the internet describes changes between the last 2 Java versions. However, if you&#8217;re in a similar situation as me, you&#8217;re not using one of the latest Java versions but [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":888,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[64],"tags":[15],"series":[],"class_list":["post-769","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-java"],"jetpack_publicize_connections":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>New features between Java 8 and Java 19 - .Lost in Coding<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New features between Java 8 and Java 19 - .Lost in Coding\" \/>\n<meta property=\"og:description\" content=\"Since version 9, Java has new features every 6 months and it&#8217;s very hard to keep track of these new changes. Most of the information on the internet describes changes between the last 2 Java versions. However, if you&#8217;re in a similar situation as me, you&#8217;re not using one of the latest Java versions but [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/\" \/>\n<meta property=\"og:site_name\" content=\".Lost in Coding\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ondrej.mihalyi\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ondrej.mihalyi\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-08T21:33:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-25T13:22:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ondro.inginea.eu\/wp-content\/uploads\/2021\/09\/duke-CloudSurf-small-e1637277171314.png\" \/>\n\t<meta property=\"og:image:width\" content=\"300\" \/>\n\t<meta property=\"og:image:height\" content=\"202\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ondro Mih\u00e1lyi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/OndroMih\" \/>\n<meta name=\"twitter:site\" content=\"@OndroMih\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ondro Mih\u00e1lyi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/\"},\"author\":{\"name\":\"Ondro Mih\u00e1lyi\",\"@id\":\"https:\/\/ondro.inginea.eu\/#\/schema\/person\/07ac1158ec74720744f7146572215616\"},\"headline\":\"New features between Java 8 and Java 19\",\"datePublished\":\"2022-10-08T21:33:31+00:00\",\"dateModified\":\"2023-06-25T13:22:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/\"},\"wordCount\":963,\"commentCount\":13,\"publisher\":{\"@id\":\"https:\/\/ondro.inginea.eu\/#\/schema\/person\/07ac1158ec74720744f7146572215616\"},\"keywords\":[\"Java\"],\"articleSection\":[\"Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/\",\"url\":\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/\",\"name\":\"New features between Java 8 and Java 19 - .Lost in Coding\",\"isPartOf\":{\"@id\":\"https:\/\/ondro.inginea.eu\/#website\"},\"datePublished\":\"2022-10-08T21:33:31+00:00\",\"dateModified\":\"2023-06-25T13:22:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ondro.inginea.eu\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New features between Java 8 and Java 19\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ondro.inginea.eu\/#website\",\"url\":\"https:\/\/ondro.inginea.eu\/\",\"name\":\".Lost in Coding\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/ondro.inginea.eu\/#\/schema\/person\/07ac1158ec74720744f7146572215616\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ondro.inginea.eu\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/ondro.inginea.eu\/#\/schema\/person\/07ac1158ec74720744f7146572215616\",\"name\":\"Ondro Mih\u00e1lyi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ondro.inginea.eu\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/i2.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2017\/08\/fotoOMsquare3x300.jpg?fit=300%2C300&ssl=1\",\"contentUrl\":\"https:\/\/i2.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2017\/08\/fotoOMsquare3x300.jpg?fit=300%2C300&ssl=1\",\"width\":300,\"height\":300,\"caption\":\"Ondro Mih\u00e1lyi\"},\"logo\":{\"@id\":\"https:\/\/ondro.inginea.eu\/#\/schema\/person\/image\/\"},\"description\":\"Ondro is a software developer and consultant specializing in combining standard and proven tools to solve new and challenging problems. He's been developing in Java for over 10 years. He\u2019s worked for clients like Payara, LottoLand, Uniqa and others. He has co-founded OmniFish, where he works as a director and Jakarta EE expert. He\u2019s passionate about helping his clients and the wider Java community with their projects based on Jakarta EE and similar technologies. As an experienced Java developer and instructor, he's helped companies build and educate their development teams and improve their development processes. He's a core member of several opensource projects and Jakarta EE specification projects. He\u2019s a frequent conference speaker, leader of the Czech JUG and a Java Champion. Ondro is a regular conference speaker at international conferences. Since 2016, he's presented at the following conferences: \u2022 FOSDEM, Brussels, Belgium 2023) \u2022 JChampionsConf, Online (year 2023) \u2022 EclipseCon, Germany (year 2022) \u2022 GeeCon, Prague, Czechia (years 2016, 2019, 2022) \u2022 JavaLand, Bruehl, Germany (years 2018, 2021) \u2022 JFokus, Stockholm, Sweden (year 2019) \u2022 Devops Con, Munich, Germany (year 2019) \u2022 Oracle CodeOne, San Francisco, USA (years 2018, 2019) \u2022 Devoxx, Antwerp, Belgium (year 2018) \u2022 JPrime, Sofia, Bulgaria (years 2017, 2018) \u2022 Java2Days, Sofia, Bulgaria (years 2016, 2018) \u2022 EclipseCon, France (year 2018) \u2022 JavaOne, San Francisco, USA (years 2016, 2017) \u2022 Oracle Code, Prague, Czechia (year 2017) \u2022 Devoxx, London, UK (year 2017) \u2022 GeeCon, Krakow, Poland (year 2017) \u2022 W-JAX, Munich, Germany (years 2016, 2017) \u2022 Bed-Con, Berlin, Germany (year 2017) \u2022 Oredev, Malmo, Sweden (year 2017) \u2022 Devoxx, Casablanca, Morocco (year 2017) \u2022 Java Developer Days, Krakow, Poland (year 2016)\",\"sameAs\":[\"https:\/\/www.facebook.com\/ondrej.mihalyi\",\"https:\/\/cz.linkedin.com\/in\/mihalyiondrej\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/OndroMih\"],\"url\":\"https:\/\/ondro.inginea.eu\/index.php\/author\/ondrejm\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"New features between Java 8 and Java 19 - .Lost in Coding","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/","og_locale":"en_US","og_type":"article","og_title":"New features between Java 8 and Java 19 - .Lost in Coding","og_description":"Since version 9, Java has new features every 6 months and it&#8217;s very hard to keep track of these new changes. Most of the information on the internet describes changes between the last 2 Java versions. However, if you&#8217;re in a similar situation as me, you&#8217;re not using one of the latest Java versions but [&hellip;]","og_url":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/","og_site_name":".Lost in Coding","article_publisher":"https:\/\/www.facebook.com\/ondrej.mihalyi","article_author":"https:\/\/www.facebook.com\/ondrej.mihalyi","article_published_time":"2022-10-08T21:33:31+00:00","article_modified_time":"2023-06-25T13:22:09+00:00","og_image":[{"width":300,"height":202,"url":"https:\/\/ondro.inginea.eu\/wp-content\/uploads\/2021\/09\/duke-CloudSurf-small-e1637277171314.png","type":"image\/png"}],"author":"Ondro Mih\u00e1lyi","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/OndroMih","twitter_site":"@OndroMih","twitter_misc":{"Written by":"Ondro Mih\u00e1lyi","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/#article","isPartOf":{"@id":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/"},"author":{"name":"Ondro Mih\u00e1lyi","@id":"https:\/\/ondro.inginea.eu\/#\/schema\/person\/07ac1158ec74720744f7146572215616"},"headline":"New features between Java 8 and Java 19","datePublished":"2022-10-08T21:33:31+00:00","dateModified":"2023-06-25T13:22:09+00:00","mainEntityOfPage":{"@id":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/"},"wordCount":963,"commentCount":13,"publisher":{"@id":"https:\/\/ondro.inginea.eu\/#\/schema\/person\/07ac1158ec74720744f7146572215616"},"keywords":["Java"],"articleSection":["Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/","url":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/","name":"New features between Java 8 and Java 19 - .Lost in Coding","isPartOf":{"@id":"https:\/\/ondro.inginea.eu\/#website"},"datePublished":"2022-10-08T21:33:31+00:00","dateModified":"2023-06-25T13:22:09+00:00","breadcrumb":{"@id":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ondro.inginea.eu\/index.php\/new-features-in-java-versions-since-java-8\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ondro.inginea.eu\/"},{"@type":"ListItem","position":2,"name":"New features between Java 8 and Java 19"}]},{"@type":"WebSite","@id":"https:\/\/ondro.inginea.eu\/#website","url":"https:\/\/ondro.inginea.eu\/","name":".Lost in Coding","description":"","publisher":{"@id":"https:\/\/ondro.inginea.eu\/#\/schema\/person\/07ac1158ec74720744f7146572215616"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ondro.inginea.eu\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/ondro.inginea.eu\/#\/schema\/person\/07ac1158ec74720744f7146572215616","name":"Ondro Mih\u00e1lyi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ondro.inginea.eu\/#\/schema\/person\/image\/","url":"https:\/\/i2.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2017\/08\/fotoOMsquare3x300.jpg?fit=300%2C300&ssl=1","contentUrl":"https:\/\/i2.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2017\/08\/fotoOMsquare3x300.jpg?fit=300%2C300&ssl=1","width":300,"height":300,"caption":"Ondro Mih\u00e1lyi"},"logo":{"@id":"https:\/\/ondro.inginea.eu\/#\/schema\/person\/image\/"},"description":"Ondro is a software developer and consultant specializing in combining standard and proven tools to solve new and challenging problems. He's been developing in Java for over 10 years. He\u2019s worked for clients like Payara, LottoLand, Uniqa and others. He has co-founded OmniFish, where he works as a director and Jakarta EE expert. He\u2019s passionate about helping his clients and the wider Java community with their projects based on Jakarta EE and similar technologies. As an experienced Java developer and instructor, he's helped companies build and educate their development teams and improve their development processes. He's a core member of several opensource projects and Jakarta EE specification projects. He\u2019s a frequent conference speaker, leader of the Czech JUG and a Java Champion. Ondro is a regular conference speaker at international conferences. Since 2016, he's presented at the following conferences: \u2022 FOSDEM, Brussels, Belgium 2023) \u2022 JChampionsConf, Online (year 2023) \u2022 EclipseCon, Germany (year 2022) \u2022 GeeCon, Prague, Czechia (years 2016, 2019, 2022) \u2022 JavaLand, Bruehl, Germany (years 2018, 2021) \u2022 JFokus, Stockholm, Sweden (year 2019) \u2022 Devops Con, Munich, Germany (year 2019) \u2022 Oracle CodeOne, San Francisco, USA (years 2018, 2019) \u2022 Devoxx, Antwerp, Belgium (year 2018) \u2022 JPrime, Sofia, Bulgaria (years 2017, 2018) \u2022 Java2Days, Sofia, Bulgaria (years 2016, 2018) \u2022 EclipseCon, France (year 2018) \u2022 JavaOne, San Francisco, USA (years 2016, 2017) \u2022 Oracle Code, Prague, Czechia (year 2017) \u2022 Devoxx, London, UK (year 2017) \u2022 GeeCon, Krakow, Poland (year 2017) \u2022 W-JAX, Munich, Germany (years 2016, 2017) \u2022 Bed-Con, Berlin, Germany (year 2017) \u2022 Oredev, Malmo, Sweden (year 2017) \u2022 Devoxx, Casablanca, Morocco (year 2017) \u2022 Java Developer Days, Krakow, Poland (year 2016)","sameAs":["https:\/\/www.facebook.com\/ondrej.mihalyi","https:\/\/cz.linkedin.com\/in\/mihalyiondrej","https:\/\/twitter.com\/https:\/\/twitter.com\/OndroMih"],"url":"https:\/\/ondro.inginea.eu\/index.php\/author\/ondrejm\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2021\/09\/duke-CloudSurf-small-e1637277171314.png?fit=300%2C202&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6wlb6-cp","jetpack-related-posts":[{"id":40,"url":"https:\/\/ondro.inginea.eu\/index.php\/anybody-likes-reading-com-superframework-core-base-object-object-new-com-superframework-core-base-object-in-the-code\/","url_meta":{"origin":769,"position":0},"title":"Why Java forces us to write rubbish code?","author":"Ondro Mih\u00e1lyi","date":"17 March, 2015","format":false,"excerpt":"Anybody I don't like, read this! : com.superframework.core.base.Object object = new com.superframework.core.base.Object() Sometimes one cannot avoid this rubbish in Java, even today. I do not wish my enemies to read such code, not in my code I want to be proud of! I wonder how many times I have asked\u2026","rel":"","context":"In &quot;Java&quot;","block_context":{"text":"Java","link":"https:\/\/ondro.inginea.eu\/index.php\/category\/java\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":157,"url":"https:\/\/ondro.inginea.eu\/index.php\/structure-of-modern-java-ee-application-in-slovak-language\/","url_meta":{"origin":769,"position":1},"title":"[Slovak language] \u0160trukt\u00fara modernej Java EE aplik\u00e1cie","author":"Ondro Mih\u00e1lyi","date":"4 October, 2015","format":false,"excerpt":"Read in Slovak language: \u0160trukt\u00fara modernej Java EE aplik\u00e1cie (Structure of modern Java EE application). \u00a0","rel":"","context":"In &quot;Slovak&quot;","block_context":{"text":"Slovak","link":"https:\/\/ondro.inginea.eu\/index.php\/category\/slovak\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":533,"url":"https:\/\/ondro.inginea.eu\/index.php\/using-hotswapagent-to-speed-up-development\/","url_meta":{"origin":769,"position":2},"title":"Using HotswapAgent to speed up development","author":"Ondro Mih\u00e1lyi","date":"20 October, 2017","format":false,"excerpt":"As a Java EE developer, I sometimes envy how fast it's possible to see the result of a code change in a running application with interpreted languages like PHP or JavaScript. With Java, it's always necessary to rebuild the source code in a bytecode, which can be then safely updated\u2026","rel":"","context":"In &quot;Configuration&quot;","block_context":{"text":"Configuration","link":"https:\/\/ondro.inginea.eu\/index.php\/category\/config\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/ondro.inginea.eu\/wp-content\/uploads\/2017\/09\/Screenshot-from-DCEVM.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":513,"url":"https:\/\/ondro.inginea.eu\/index.php\/oracle-to-open-javaee-what-to-expect\/","url_meta":{"origin":769,"position":3},"title":"Oracle announced to open JavaEE &#8211; what to expect in the future?","author":"Ondro Mih\u00e1lyi","date":"26 August, 2017","format":false,"excerpt":"Last week, Oracle announced their intentions to open Java EE and transfer it to an open source foundation to continue its development in a more open way. I've been involved in some email discussions (here and here) and in a conference call organized by Oracle and\u00a0I want to summarize what\u2026","rel":"","context":"In &quot;Opinions&quot;","block_context":{"text":"Opinions","link":"https:\/\/ondro.inginea.eu\/index.php\/category\/opinion\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":209,"url":"https:\/\/ondro.inginea.eu\/index.php\/mvc-1-0-in-java-ee-8-getting-started-using-facelets\/","url_meta":{"origin":769,"position":4},"title":"MVC 1.0 in Java EE 8: Getting started using facelets","author":"Ondro Mih\u00e1lyi","date":"19 January, 2016","format":false,"excerpt":"MVC 1.0 is an action-based Model-View-Controller web framework, which will be a part of future Java EE 8. It will live side by side with component-based JSF framework and will provide an alternative for building HTML+javascript oriented applications with full control over URLs. This post summarizes what needs to be\u2026","rel":"","context":"In &quot;Jakarta EE&quot;","block_context":{"text":"Jakarta EE","link":"https:\/\/ondro.inginea.eu\/index.php\/category\/java\/jakarta-ee\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":286,"url":"https:\/\/ondro.inginea.eu\/index.php\/building-a-new-productive-team-around-java-ee-7\/","url_meta":{"origin":769,"position":5},"title":"Building a new productive team around Java&nbsp;EE&nbsp;7","author":"Ondro Mih\u00e1lyi","date":"18 April, 2016","format":false,"excerpt":"Anton Smutn\u00fd is a software engineering manager at Muehlbauer Group, an international industrial company specializing in wide array of technologies. At the technology center located in Nitra, Slovakia, they are building a new agile Java team to fulfil growing internal needs for innovation and automation. Their team approached me to\u2026","rel":"","context":"In &quot;Interviews&quot;","block_context":{"text":"Interviews","link":"https:\/\/ondro.inginea.eu\/index.php\/category\/interviews\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/posts\/769"}],"collection":[{"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/comments?post=769"}],"version-history":[{"count":47,"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/posts\/769\/revisions"}],"predecessor-version":[{"id":1145,"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/posts\/769\/revisions\/1145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/media\/888"}],"wp:attachment":[{"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/media?parent=769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/categories?post=769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/tags?post=769"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/ondro.inginea.eu\/index.php\/wp-json\/wp\/v2\/series?post=769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}