<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Records on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/records/</link><description>Recent content in Records on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 26 Nov 2025 11:05:08 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/records/index.xml" rel="self" type="application/rss+xml"/><item><title>The Visitor Pattern - 'Revisited' using Data Oriented Programming techniques</title><link>https://foojayio.github.io/website/today/the-visitor-pattern-revisited-using-data-oriented-programming-techniques/</link><pubDate>Wed, 26 Nov 2025 10:38:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-visitor-pattern-revisited-using-data-oriented-programming-techniques/</guid><description>&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Design patterns are great, they standardize solutions for common programming problems so you don&amp;rsquo;t shoot yourself in the foot or reinvent the wheel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;However, some might argue that some design patterns only exist in a programming language because that language lacks a way to elegantly and efficiently express it in its syntax.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For example, the &lt;a href="https://en.wikipedia.org/wiki/Strategy_pattern" target="_blank" rel="noopener noreferrer"&gt;Strategy pattern&lt;/a&gt;
 is a design pattern that enables selecting algorithms at runtime. Taking the example of different &lt;em&gt;strategies&lt;/em&gt; of tax calculation, let&amp;rsquo;s see what an implementation looked like &lt;em&gt;before&lt;/em&gt; java 8:&lt;/p&gt;</description></item><item><title>Java 23 Has Arrived, And It Brings a Truckload of Changes</title><link>https://foojayio.github.io/website/today/java-23-has-arrived-and-it-brings-a-truckload-of-changes/</link><pubDate>Tue, 17 Sep 2024 06:45:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-23-has-arrived-and-it-brings-a-truckload-of-changes/</guid><description>&lt;p&gt;Java 23 has arrived! It&amp;rsquo;s been six months since Java 22 was released, so it&amp;rsquo;s time for a fresh truckload of JEPs.&lt;/p&gt;
&lt;p&gt;In this article, we take you on a tour of everything that is part of this release, giving you a brief introduction to each of them.&lt;/p&gt;
&lt;p&gt;Where applicable the differences with Java 22 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to start using these features after reading this.&lt;/p&gt;</description></item><item><title>Java 22 Is Here, And It's Ready To Rock</title><link>https://foojayio.github.io/website/today/java-22-is-here-and-its-ready-to-rock/</link><pubDate>Tue, 19 Mar 2024 13:56:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-22-is-here-and-its-ready-to-rock/</guid><description>&lt;p&gt;Java 22 is here!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been six months since Java 21 was released, so it&amp;rsquo;s time for another fresh set of Java features.&lt;/p&gt;
&lt;p&gt;In this article, you&amp;rsquo;ll go on a tour of the JEPs that are part of this release, giving you a brief introduction to each of them.&lt;/p&gt;
&lt;p&gt;Where applicable, the differences with Java 21 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to use these features after reading this!&lt;/p&gt;</description></item><item><title>Java 21 Is Available Today, And It's Quite The Update</title><link>https://foojayio.github.io/website/today/java-21-is-available-today-and-its-quite-the-update/</link><pubDate>Tue, 19 Sep 2023 05:31:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-21-is-available-today-and-its-quite-the-update/</guid><description>&lt;p&gt;&lt;strong&gt;Today&amp;rsquo;s the first day of Java 21&amp;rsquo;s availability! It&amp;rsquo;s been six months since Java 20 was released, so it&amp;rsquo;s time for another fresh wave of Java features. This post takes you on a tour of the JEPs that are associated with this release and it gives you a brief introduction to each of them, and &lt;a href="https://foojayio.github.io/website/today/foojay-podcast-28/"&gt;check out the Java 21 podcast here&lt;/a&gt;
. Where applicable the differences with Java 20 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to use these features after reading this!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Exploring Java Records In A Jakarta EE Context</title><link>https://foojayio.github.io/website/today/exploring-java-records-in-a-jakarta-ee-context/</link><pubDate>Wed, 14 Jun 2023 21:08:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-java-records-in-a-jakarta-ee-context/</guid><description>&lt;p&gt;Java Records, one of the major highlights of the Java 16 release, provides a concise and immutable way to define classes for modelling data.&lt;/p&gt;
&lt;p&gt;This conciseness lends itself useful in a typical Jakarta EE application that can have a number of layers that need to share data.&lt;/p&gt;
&lt;p&gt;For example, the data layer might want to return a subset of a given data set to a calling client through a data projection object.&lt;/p&gt;</description></item><item><title>It's Java 20 Release Day! Here's What's New | foojay.io Today</title><link>https://foojayio.github.io/website/today/its-java-20-release-day-heres-whats-new/</link><pubDate>Tue, 21 Mar 2023 06:40:34 +0000</pubDate><guid>https://foojayio.github.io/website/today/its-java-20-release-day-heres-whats-new/</guid><description>&lt;p&gt;This will be a good day, because it&amp;rsquo;s Java 20 release day!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been six months since Java 19 was released, and so it&amp;rsquo;s time for another fresh wave of Java features.&lt;/p&gt;
&lt;p&gt;In this article, we will take you on a tour through all JEPs that come with this release and give you a brief introduction of each one of them.&lt;/p&gt;
&lt;p&gt;Where applicable the differences with Java 19 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to use these features after you&amp;rsquo;ve finished reading!&lt;/p&gt;</description></item><item><title>How to Best Use Java Records as DTOs in Spring Boot 3</title><link>https://foojayio.github.io/website/today/how-to-best-use-java-records-as-dtos-in-spring-boot-3/</link><pubDate>Thu, 09 Mar 2023 17:06:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-best-use-java-records-as-dtos-in-spring-boot-3/</guid><description>&lt;p&gt;With the Spring 6 and Spring Boot 3 releases, &lt;a href="https://spring.io/blog/2022/11/16/spring-framework-6-0-goes-ga" title="Java 17&amp;#43; became the baseline framework" target="_blank" rel="noopener noreferrer"&gt;Java 17+ became the baseline framework&lt;/a&gt;
 version.&lt;/p&gt;
&lt;p&gt;So now is a great time to start using compact &lt;a href="https://docs.oracle.com/en/java/javase/14/language/records.html" title="Java Records" target="_blank" rel="noopener noreferrer"&gt;Java Records&lt;/a&gt;
 as Data Transfer Objects (&lt;a href="https://en.wikipedia.org/wiki/Data_transfer_object" title="DTOs" target="_blank" rel="noopener noreferrer"&gt;DTOs&lt;/a&gt;
) for various database and API calls.&lt;/p&gt;
&lt;p&gt;Whether you prefer reading or watching, let&amp;rsquo;s review a few approaches for using Java records as DTOs that apply to Spring Boot 3 with Hibernate 6 as the persistence provider.&lt;/p&gt;</description></item><item><title>Foojay Podcast #5: OpenJDK Discussion Panel</title><link>https://foojayio.github.io/website/today/foojay-podcast-5/</link><pubDate>Tue, 20 Sep 2022 15:56:27 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-5/</guid><description>&lt;p&gt;It&amp;rsquo;s September 20th, OpenJDK 19 has been released. In this podcast, we discuss the new features and the changes that this release brings.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/71ZAYZWwpuI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1--odcast-pps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/show/6CpTfgn9LirzJGAtc4ICdQ" target="_blank" rel="noopener noreferrer"&gt;Spotify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://podcasts.apple.com/be/podcast/foojay-io-the-friends-of-openjdk/id1652281304" target="_blank" rel="noopener noreferrer"&gt;Apple Podcasts&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;And most others&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-1-guests"&gt;Guests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://twitter.com/miragemiko" target="_blank" rel="noopener noreferrer"&gt;Miroslav Wengner&lt;/a&gt;
&lt;/strong&gt; (OpenValue)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://twitter.com/mgrygles" target="_blank" rel="noopener noreferrer"&gt;Mary Grygleski&lt;/a&gt;
&lt;/strong&gt; (CJUG, DataStax)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://twitter.com/deepu105" target="_blank" rel="noopener noreferrer"&gt;Deepu K Sasidharan&lt;/a&gt;
&lt;/strong&gt; (Okta, JHipster)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h2-2-podcast-host"&gt;Podcast host&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://twitter.com/costlow" target="_blank" rel="noopener noreferrer"&gt;Erik Costlow&lt;/a&gt;
&lt;/strong&gt; (Azul)&lt;/p&gt;</description></item><item><title>What Can We Expect In OpenJDK 19?</title><link>https://foojayio.github.io/website/today/what-can-we-expect-in-openjdk-19/</link><pubDate>Wed, 01 Jun 2022 19:00:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-can-we-expect-in-openjdk-19/</guid><description>&lt;p&gt;Although the Java 19 release is coming in September (2022-09-20), we already know what will happen in that release!&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll touch on upcoming features via examples to get a sense of how valuable these can be to a project.&lt;/p&gt;
&lt;h3 id="h3-0-jep-405-record-patterns-preview"&gt;JEP-405: Record Patterns (Preview)&lt;/h3&gt;
&lt;p&gt;Java 14 introduced (JEP-361, Reference 2), which made it possible to use a switch as a statement or an expression. In many cases, I think it was something the community shouted for quite some time, because many other JVM languages have already provided such constructs.&lt;/p&gt;</description></item><item><title>Avoid Multithreading Bugs Using Immutable Java Records</title><link>https://foojayio.github.io/website/today/immutable-records/</link><pubDate>Mon, 07 Jun 2021 07:52:44 +0000</pubDate><guid>https://foojayio.github.io/website/today/immutable-records/</guid><description>&lt;p&gt;In a multi-threaded Java application, any thread can change the state of an object. The &lt;a href="https://foojayio.github.io/website/today/demystifying-jvm-memory-management/"&gt;Java memory model&lt;/a&gt;
 in Java language specification specifies when exactly updates made by one thread are going to be visible to other threads. This is one of the biggest problems professional Java developers deal with every day. Java records are immutable, an object is considered immutable if its state cannot change after it is constructed. The immutable nature of the record eliminates problems of its usage in a multithreaded environment.&lt;/p&gt;</description></item><item><title>Getting Started with Java 16 and IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/java-16-and-intellij-idea/</link><pubDate>Tue, 06 Apr 2021 07:11:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-16-and-intellij-idea/</guid><description>&lt;p&gt;If you are still working with Java 8, you might have mixed feelings about the news of the release of &lt;a href="http://openjdk.java.net/projects/jdk/16/" target="_blank" rel="noopener noreferrer"&gt;Java 16&lt;/a&gt;
. However, you&amp;rsquo;ll see these numbers are going to increment at a much faster and predictable rate with Java&amp;rsquo;s six-month release cadence.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m personally excited about Java 16! It adds &lt;a href="https://openjdk.java.net/jeps/395" target="_blank" rel="noopener noreferrer"&gt;Records&lt;/a&gt;
 and &lt;a href="https://openjdk.java.net/jeps/394" target="_blank" rel="noopener noreferrer"&gt;Pattern Matching for instanceof&lt;/a&gt;
 as standard language features with &lt;a href="https://openjdk.java.net/jeps/397" target="_blank" rel="noopener noreferrer"&gt;Sealed classes&lt;/a&gt;
 continuing to be a &lt;a href="https://openjdk.java.net/jeps/12" target="_blank" rel="noopener noreferrer"&gt;preview feature&lt;/a&gt;
 (in the second preview).&lt;/p&gt;</description></item><item><title>Introduction to Java Records: Data carrier classes</title><link>https://foojayio.github.io/website/today/records/</link><pubDate>Wed, 31 Mar 2021 07:16:13 +0000</pubDate><guid>https://foojayio.github.io/website/today/records/</guid><description>&lt;p&gt;Professional Java developers need immutable data carrier-classes for communication with databases and web Services. We need to write a lot of boilerplate code to create a simple data carrier-class, we typically implement constructor, accessors, equals(), hashCode(), and toString(). &lt;em&gt;&lt;strong&gt;This process is repetitive and error-prone. Developers also complain &amp;ldquo;Java is too verbose&amp;rdquo;.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Record classes provide a way to model data in Java. An example of data is a row in a database table. This feature simplifies coding, makes Java code more concise and readable, increasing productivity for professional Java developers. Java14 introduced Records as a preview feature, Java15 brings in some updates as a second preview, and Java16 makes it a final feature, no changes will be needed for Records after this.&lt;/p&gt;</description></item><item><title>Spring Boot, Java 16, and New Java Records</title><link>https://foojayio.github.io/website/today/spring-boot-java-16-records/</link><pubDate>Tue, 23 Mar 2021 09:55:23 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-java-16-records/</guid><description>&lt;p&gt;In this article, we will discuss Records, which is an official feature in Java 16, and we will apply this knowledge while using it in conjunction with a Spring Boot application.&lt;/p&gt;
&lt;h3 id="h3-0-introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;On March 16th, 2021, Java 16 was GA. With this new release, tons of new exciting features are added. Check out &lt;a href="https://foojayio.github.io/website/today/highlights-of-new-jeps-in-java-16/"&gt;the highlights here on Foojay&lt;/a&gt;
 to know more about these changes.&lt;/p&gt;
&lt;p&gt;In this article, we&amp;rsquo;ll focus on Java Records, defined in &lt;a href="https://openjdk.java.net/jeps/395" target="_blank" rel="noopener noreferrer"&gt;JEP 395&lt;/a&gt;
. Records were first introduced in JDK 14 as a preview feature, proposed by JEP 359, and with JDK 15 they remained in preview with JEP 384. However, with JDK 16, Records are now no longer in preview: they&amp;rsquo;re an official part of the Java language now.&lt;/p&gt;</description></item><item><title>Highlights of the Newest and Latest JEPs in Java 16</title><link>https://foojayio.github.io/website/today/highlights-of-new-jeps-in-java-16/</link><pubDate>Tue, 16 Mar 2021 18:02:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/highlights-of-new-jeps-in-java-16/</guid><description>&lt;p&gt;The JDK Enhancement Proposal (or JEP) is a community process for collecting proposals for enhancements to the OpenJDK.&lt;/p&gt;
&lt;p&gt;Java 16, released today, incorporates the JEPs below:&lt;/p&gt;
&lt;p&gt;|&amp;mdash;&amp;mdash;&amp;mdash;|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-|&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-|
| &lt;strong&gt;JEP&lt;/strong&gt; | &lt;strong&gt;Name&lt;/strong&gt; | &lt;strong&gt;Summary&lt;/strong&gt; |
| 338 | &lt;a href="https://openjdk.java.net/jeps/338" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Vector API (Incubator)&lt;/strong&gt;&lt;/a&gt;
 | Provide an initial iteration of an &lt;a href="https://openjdk.java.net/jeps/11" target="_blank" rel="noopener noreferrer"&gt;incubator module&lt;/a&gt;
, &lt;code&gt;jdk.incubator.vector&lt;/code&gt;, to express vector computations that reliably compile at runtime to optimal vector hardware instructions on supported CPU architectures and thus achieve superior performance to equivalent scalar computations. |
| 347 | &lt;a href="https://openjdk.java.net/jeps/347" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Enable C++14 Language Features&lt;/strong&gt;&lt;/a&gt;
 | Allow the use of C++14 language features in JDK C++ source code, and give specific guidance about which of those features may be used in HotSpot code. |
| 357 | &lt;a href="https://openjdk.java.net/jeps/357" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Migrate from Mercurial to Git&lt;/strong&gt;&lt;/a&gt;
 | Migrate the OpenJDK Community&amp;rsquo;s source code repositories from Mercurial (hg) to Git. |
| 369 | &lt;a href="https://openjdk.java.net/jeps/369" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Migrate to GitHub&lt;/strong&gt;&lt;/a&gt;
 | Host the OpenJDK Community&amp;rsquo;s Git repositories on &lt;a href="https://www.github.com/" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
. In concert with &lt;a href="https://openjdk.java.net/jeps/357" target="_blank" rel="noopener noreferrer"&gt;JEP 357 (Migrate from Mercurial to Git)&lt;/a&gt;
, this would migrate all single-repository OpenJDK Projects to GitHub, including both &lt;a href="https://openjdk.java.net/projects/jdk/" target="_blank" rel="noopener noreferrer"&gt;JDK feature releases&lt;/a&gt;
 and &lt;a href="https://openjdk.java.net/projects/jdk-updates/" target="_blank" rel="noopener noreferrer"&gt;JDK update releases&lt;/a&gt;
 for versions 11 and later. |
| 376 | &lt;a href="https://openjdk.java.net/jeps/376" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Concurrent Thread-Stack Processing&lt;/strong&gt;&lt;/a&gt;
 | Move ZGC thread-stack processing from safepoints to a concurrent phase. |
| 380 | &lt;a href="https://openjdk.java.net/jeps/380" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Unix-Domain Socket Channels&lt;/strong&gt;&lt;/a&gt;
 | Add Unix-domain (&lt;code&gt;AF_UNIX&lt;/code&gt;) socket support to the &lt;a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/nio/channels/SocketChannel.html" target="_blank" rel="noopener noreferrer"&gt;socket channel&lt;/a&gt;
 and &lt;a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/nio/channels/ServerSocketChannel.html" target="_blank" rel="noopener noreferrer"&gt;server-socket channel&lt;/a&gt;
 APIs in the &lt;code&gt;java.nio.channels&lt;/code&gt; package. Extend the &lt;a href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/nio/channels/spi/SelectorProvider.html#inheritedChannel%28%29" target="_blank" rel="noopener noreferrer"&gt;inherited channel mechanism&lt;/a&gt;
 to support Unix-domain socket channels and server socket channels. |
| 386 | &lt;a href="https://openjdk.java.net/jeps/386" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Alpine Linux Port&lt;/strong&gt;&lt;/a&gt;
 | Port the JDK to Alpine Linux, and to other Linux distributions that use musl as their primary C library, on both the x64 and AArch64 architectures, |
| 387 | &lt;a href="https://openjdk.java.net/jeps/387" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Elastic Metaspace&lt;/strong&gt;&lt;/a&gt;
 | Return unused HotSpot class-metadata (i.e., &lt;em&gt;metaspace&lt;/em&gt;) memory to the operating system more promptly, reduce metaspace footprint, and simplify the metaspace code in order to reduce maintenance costs. |
| 388 | &lt;a href="https://openjdk.java.net/jeps/388" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Windows/AArch64 Port&lt;/strong&gt;&lt;/a&gt;
 | Port the JDK to Windows/AArch64. |
| 389 | &lt;a href="https://openjdk.java.net/jeps/389" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Foreign Linker API (Incubator)&lt;/strong&gt;&lt;/a&gt;
 | Introduce an API that offers statically-typed, pure-Java access to native code. This API, together with the Foreign-Memory API (&lt;a href="https://openjdk.java.net/jeps/393" target="_blank" rel="noopener noreferrer"&gt;JEP 393&lt;/a&gt;
), will considerably simplify the otherwise error-prone process of binding to a native library. |
| 390 | &lt;a href="https://openjdk.java.net/jeps/390" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Warnings for Value-Based Classes&lt;/strong&gt;&lt;/a&gt;
 | Designate the primitive wrapper classes as &lt;em&gt;value-based&lt;/em&gt; and deprecate their constructors for removal, prompting new deprecation warnings. Provide warnings about improper attempts to synchronize on instances of any value-based classes in the Java Platform. |
| 392 | &lt;a href="https://openjdk.java.net/jeps/392" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Packaging Tool&lt;/strong&gt;&lt;/a&gt;
 | Provide the &lt;code&gt;jpackage&lt;/code&gt; tool, for packaging self-contained Java applications. |
| 393 | &lt;a href="https://openjdk.java.net/jeps/393" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Foreign-Memory Access API (Third Incubator)&lt;/strong&gt;&lt;/a&gt;
 | Introduce an API to allow Java programs to safely and efficiently access foreign memory outside of the Java heap. |
| 394 | &lt;a href="https://openjdk.java.net/jeps/394" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Pattern Matching for instanceof&lt;/strong&gt;&lt;/a&gt;
 | Enhance the Java programming language with &lt;em&gt;pattern matching&lt;/em&gt; for the&lt;code&gt;instanceof&lt;/code&gt; operator. &lt;a href="https://cr.openjdk.java.net/~briangoetz/amber/pattern-match.html" target="_blank" rel="noopener noreferrer"&gt;Pattern matching&lt;/a&gt;
 allows common logic in a program, namely the conditional extraction of components from objects, to be expressed more concisely and safely. |
| 395 | &lt;a href="https://openjdk.java.net/jeps/395" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Records&lt;/strong&gt;&lt;/a&gt;
 | Enhance the Java programming language with &lt;a href="https://cr.openjdk.java.net/~briangoetz/amber/datum.html" target="_blank" rel="noopener noreferrer"&gt;records&lt;/a&gt;
, which are classes that act as transparent carriers for immutable data. Records can be thought of as &lt;em&gt;nominal tuples&lt;/em&gt;. |
| 396 | &lt;a href="https://openjdk.java.net/jeps/396" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Strongly Encapsulate JDK Internals by Default&lt;/strong&gt;&lt;/a&gt;
 | Strongly encapsulate all internal elements of the JDK by default, except for &lt;a href="https://openjdk.java.net/jeps/260#Description" target="_blank" rel="noopener noreferrer"&gt;critical internal APIs&lt;/a&gt;
 such as &lt;code&gt;sun.misc.Unsafe&lt;/code&gt;. Allow end users to choose the relaxed strong encapsulation that has been the default since JDK 9. |
| 397 | &lt;a href="https://openjdk.java.net/jeps/397" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Sealed Classes (Second Preview)&lt;/strong&gt;&lt;/a&gt;
 | Enhance the Java programming language with &lt;a href="https://cr.openjdk.java.net/~briangoetz/amber/datum.html" target="_blank" rel="noopener noreferrer"&gt;sealed classes and interfaces&lt;/a&gt;
. Sealed classes and interfaces restrict which other classes or interfaces may extend or implement them. |&lt;/p&gt;</description></item></channel></rss>