<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>JEPs on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/category/jeps/</link><description>Recent content in JEPs on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 01 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foojay.io/today/category/jeps/index.xml" rel="self" type="application/rss+xml"/><item><title>Why Every JVM In Your Fleet Warms Up Alone</title><link>https://foojay.io/today/why-every-jvm-in-your-fleet-warms-up-alone/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/why-every-jvm-in-your-fleet-warms-up-alone/</guid><description>&lt;p&gt;We live in a distributed systems world. We handle more traffic &amp;ldquo;simply&amp;rdquo; by adding more instances, or replicas, of the same service and then distribute the traffic between them.&lt;/p&gt;&#10;&lt;p&gt;The service ends up running on tens, hundreds or thousands of JVMs. Same JAR, same JDK, same instance type, same traffic shape. Instance 1 starts cold, spends its first minutes working out which of its several thousand methods are hot, and compiles them optimizing them specifically for the traffic observed. Instance 1000, starting a couple hours later, does exactly the same thing. From scratch, for the 1000th time.&lt;/p&gt;</description></item><item><title>Hello Java 27! Have You Been Working Out?</title><link>https://foojay.io/today/hello-java-27-have-you-been-working-out/</link><pubDate>Tue, 15 Sep 2026 08:00:00 +0000</pubDate><guid>https://foojay.io/today/hello-java-27-have-you-been-working-out/</guid><description>&lt;p&gt;It&amp;rsquo;s been six months since we saw a new Java release, and this new edition seems to be ready to flex its muscles. With numerous improvements to performance and security, Java 27 is like that friend that you haven&amp;rsquo;t seen all summer, and when you finally see them again it&amp;rsquo;s clear that they spent a lot of time in the gym!&lt;/p&gt;&#10;&lt;p&gt;This post focuses on everything that has been added in this release, giving you a brief introduction to each of the features. Where applicable the differences with Java 26 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>Your TLS Stack Is Lying to You About Zero-Copy</title><link>https://foojay.io/today/your-tls-stack-is-lying-about-zero-copy/</link><pubDate>Wed, 10 Jun 2026 12:00:28 +0000</pubDate><guid>https://foojay.io/today/your-tls-stack-is-lying-about-zero-copy/</guid><description>&lt;h2 id="the-no-waste-compute-constraint"&gt;The &amp;ldquo;No Waste Compute&amp;rdquo; Constraint&lt;/h2&gt;&#10;&lt;p&gt;When I started designing the Exeris Kernel, I set one non-negotiable rule very early: no waste compute. That rule sounds like a performance slogan until it starts killing otherwise normal design decisions.&lt;/p&gt;&#10;&lt;p&gt;I had already banned &lt;code&gt;ThreadLocal&lt;/code&gt;, moved context propagation to Scoped Values, and pushed more of the runtime into explicit off-heap ownership. The idea was simple: if the hot path is supposed to stay outside GC pressure, then memory shape and lifetime cannot be treated as incidental details.&lt;/p&gt;</description></item><item><title>Scoped Values: Why I Banned ThreadLocal in Exeris</title><link>https://foojay.io/today/banned-threadlocal-java-scoped-values/</link><pubDate>Thu, 28 May 2026 09:36:00 +0000</pubDate><guid>https://foojay.io/today/banned-threadlocal-java-scoped-values/</guid><description>&lt;h4 id="in-a-zero-copy-runtime-designed-for-1-vt-per-stream-density-threadlocal-is-a-performance-serial-killer-here-is-the-forensic-analysis-and-how-jep-506-scoped-values-changed-everything"&gt;In a zero-copy runtime designed for 1-VT-per-Stream density, ThreadLocal is a performance serial killer. Here is the forensic analysis and how JEP 506 Scoped Values changed everything.&lt;/h4&gt;&#10;&lt;p&gt;When I started designing the &lt;strong&gt;Exeris Kernel&lt;/strong&gt; — a next-generation, zero-copy runtime built for Java 26+ — I established one non-negotiable architectural law: &lt;strong&gt;&amp;ldquo;No Waste Compute.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;In a system designed to handle extreme density by mapping exactly one Virtual Thread to every network stream (1-VT-per-Stream), every byte of memory and every CPU cycle must be intentional.&lt;/p&gt;</description></item><item><title>How to Use Java as a Scripting Language</title><link>https://foojay.io/today/java-for-scripting/</link><pubDate>Mon, 23 Mar 2026 10:00:19 +0000</pubDate><guid>https://foojay.io/today/java-for-scripting/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/java-for-scripting/java-script-cover-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="the-scripting-dilemma"&gt;The Scripting Dilemma&lt;/h2&gt;&#10;&lt;p&gt;If you&amp;rsquo;re like me, as a Java developer, you struggle to remember bash or python syntax for quick scripts.&lt;/p&gt;&#10;&lt;p&gt;You end up &amp;ldquo;vibe coding&amp;rdquo; it, then struggle again when you need to adapt it. If only you could write it in Java!&lt;/p&gt;&#10;&lt;p&gt;You might say &amp;ldquo;Java is not for scripting&amp;rdquo; and &amp;ldquo;I don&amp;rsquo;t want maven or Gradle&amp;rdquo;.Modern Java has quietly eliminated the traditional barriers that made it unsuitable for scripting.With instant execution, shebang support, and zero-setup automation, Java has evolved into a lean scripting language. Write precise, maintainable code without the &amp;ldquo;vibe coding&amp;rdquo; that comes with unfamiliar languages.&lt;/p&gt;</description></item><item><title>How is Leyden improving Java Performance? Part 1 of 3</title><link>https://foojay.io/today/how-is-leyden-improving-java-performance-part-1-of-3/</link><pubDate>Tue, 17 Mar 2026 12:00:45 +0000</pubDate><guid>https://foojay.io/today/how-is-leyden-improving-java-performance-part-1-of-3/</guid><description>&lt;p&gt;In this series of 3 blog posts we will explain how OpenJDK project Leyden is helping to improve a specific area of performance where Java has notably lagged behind other languages i.e. application &amp;lsquo;startup&amp;rsquo;, &amp;lsquo;warmup&amp;rsquo;, and &amp;lsquo;initial footprint&amp;rsquo;.&lt;/p&gt;&#10;&lt;p&gt;Part 1 explains what those terms mean and why Java faces challenges in matching the behaviour of other languages. It then provides an overview of what Leyden has done to improve startup and warmup in existing JDK releases and what is planned for upcoming releases.&lt;/p&gt;</description></item><item><title>Java 26: What’s New?</title><link>https://foojay.io/today/java-26-whats-new/</link><pubDate>Tue, 03 Mar 2026 10:00:28 +0000</pubDate><guid>https://foojay.io/today/java-26-whats-new/</guid><description>&lt;p&gt;This article was first published in my personal blog: &lt;a href="https://www.loicmathieu.fr/wordpress/informatique/java-26-whats-new/" target="_blank" rel="noopener noreferrer"&gt;Java 26: What&amp;rsquo;s new?&lt;/a&gt; and is part of a serie on &lt;a href="https://www.loicmathieu.fr/wordpress/tag/whatsnew/" target="_blank" rel="noopener noreferrer"&gt;what&amp;rsquo;s new on the last versions of Java&lt;/a&gt;).&lt;/p&gt;&#10;&lt;p&gt;Now that Java 26 is features complete (Rampdown Phase Two at the day of writing), it&amp;rsquo;s time to walk through all the functionalities that bring to us, developers, this new version.&lt;/p&gt;&#10;&lt;p&gt;After Java 25 and its 18 JEPs, Java 26 arrives with a small number of JEPs, 10, with very few new features.&lt;/p&gt;</description></item><item><title>Gotta Code 'Em All: How Java Evolved Beyond Verbosity – Celebrating 30 Years of Pokémon</title><link>https://foojay.io/today/gotta-code-em-all-how-java-evolved-beyond-verbosity-celebrating-30-years-of-pokemon/</link><pubDate>Fri, 27 Feb 2026 09:57:35 +0000</pubDate><guid>https://foojay.io/today/gotta-code-em-all-how-java-evolved-beyond-verbosity-celebrating-30-years-of-pokemon/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/gotta-code-em-all-how-java-evolved-beyond-verbosity-celebrating-30-years-of-pokemon/pokemon01-1024x640.jpg" alt="" width="1024" height="640" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Happy 30th Anniversary to &lt;strong&gt;Pokémon&lt;/strong&gt;! 🎉&lt;/p&gt;&#10;&lt;p&gt;February 27, 2026 marks exactly 30 years since the original Pokémon Red and Green launched in Japan on February 27, 1996. From catching your first Pokémon in Pallet Town to becoming Champion in the Indigo League, the franchise has spent three decades teaching millions of players about strategy, friendship, exploration, and constant improvement, evolving creatures, teams, and even entire generations of games.&lt;/p&gt;&#10;&lt;p&gt;Pokémon is literally all about evolution and that same spirit of evolution perfectly matches what&amp;rsquo;s happening in Java right now.&lt;/p&gt;</description></item><item><title>Project Panama for Newbies (Part 2)</title><link>https://foojay.io/today/project-panama-for-newbies-part-2/</link><pubDate>Fri, 02 Jan 2026 01:21:00 +0000</pubDate><guid>https://foojay.io/today/project-panama-for-newbies-part-2/</guid><description>&lt;p&gt;&lt;strong&gt;Updated December 29, 2025 &lt;strong&gt;(&lt;strong&gt;originally published August 17&lt;/strong&gt;, 2021, republished January 2, 2026):&lt;/strong&gt;&lt;/strong&gt; This article now features Java 25 and the Foreign Function &amp;amp; Memory (FFM) API, which has been a standard feature since JDK 22 (&lt;a href="https://openjdk.java.net/jeps/454" target="_blank" rel="noopener noreferrer"&gt;JEP-454&lt;/a&gt;).&lt;/p&gt;&#10;&lt;figure class="size-full is-resized"&gt;&#10; &lt;img src="https://foojay.io/today/project-panama-for-newbies-part-2/panama_part2.png" alt="" width="218" height="407" style="width:140px;height:261px" loading="lazy" class="is-zoomable"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;Welcome back to Part 2 of Project Panama for Newbies! If you are new to this series, check out &lt;a href="https://foojay.io/today/project-panama-for-newbies-part-1/"&gt;Part 1&lt;/a&gt; first.&lt;/p&gt;&#10;&lt;p&gt;If you remember from Part 1, we learned how to create C language strings, primitive data types and arrays. We also got a chance to iterate through the data outside of the Java heap and later display items via C&amp;rsquo;s &lt;code&gt;printf()&lt;/code&gt; and Java&amp;rsquo;s &lt;code&gt;printf()&lt;/code&gt; method from the &lt;code&gt;IO.printf()&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Project Panama for Newbies (Part 1)</title><link>https://foojay.io/today/project-panama-for-newbies-part-1/</link><pubDate>Thu, 01 Jan 2026 09:11:00 +0000</pubDate><guid>https://foojay.io/today/project-panama-for-newbies-part-1/</guid><description>&lt;p&gt;&lt;strong&gt;Updated December 28, 2025 (&lt;strong&gt;originally published August 10&lt;/strong&gt;, 2021, republished January 1, 2026):&lt;/strong&gt; This article now features Java 25 and the Foreign Function &amp;amp; Memory (FFM) API, which has been a standard feature since JDK 22.&#10;&lt;img src="https://foojay.io/today/project-panama-for-newbies-part-1/duke_and_panama.png" alt="Java’s Project Panama" width="226" height="407" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;In this series of articles, we will explore the APIs from OpenJDK&amp;rsquo;s &lt;a href="https://openjdk.java.net/projects/panama/" target="_blank" rel="noopener noreferrer"&gt;Project&lt;/a&gt; &lt;a href="http://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Panama&lt;/a&gt;. My intent is to show you how to be proficient in using the Foreign Function and Memory Access APIs as it relates to Java interoperability with native code. After FFI (foreign function interface) &amp;amp; FFM (foreign function memory) have been finalized in JDK 22 the APIs currently reside in the following package namespaces.&lt;/p&gt;</description></item><item><title>Java 25: What's New?</title><link>https://foojay.io/today/java-25-whats-new/</link><pubDate>Wed, 03 Dec 2025 09:02:49 +0000</pubDate><guid>https://foojay.io/today/java-25-whats-new/</guid><description>&lt;p&gt;&lt;em&gt;This article was first published in my personal blog: &lt;a href="https://www.loicmathieu.fr/wordpress/informatique/java-25-whats-new/" target="_blank" rel="noopener noreferrer"&gt;Java 25: What&amp;rsquo;s new?&lt;/a&gt; and is part of a serie on &lt;a href="//www.loicmathieu.fr/wordpress/tag/whatsnew/" target="_blank" rel="noopener noreferrer"&gt;what&amp;rsquo;s new on the last versions of Java&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Now that Java 25 is out, it&amp;rsquo;s time to walk through all the functionalities that bring to us, developers, this new version.&lt;/p&gt;&#10;&lt;p&gt;Java 25 is the new Long-Term Support (LTS) version, containing no less than 18 JEPs. Even if this isn&amp;rsquo;t as good as the 24 JEPs in Java 24, it&amp;rsquo;s still a pretty significant number. No big news on the program, but a number of nice little ones anyway.&lt;/p&gt;</description></item><item><title>Java 24: What's New?</title><link>https://foojay.io/today/java-24-whats-new/</link><pubDate>Wed, 26 Feb 2025 09:58:53 +0000</pubDate><guid>https://foojay.io/today/java-24-whats-new/</guid><description>&lt;p&gt;&lt;strong&gt;Java 24 will be available soon, on March 18th. What are all the functionalities that this version brings to us as developers?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Java 24 contains not less than 24 JEPs, a record and above all an eponymous figure!&lt;/p&gt;&#10;&lt;h2 id="jep-404-generational-shenandoah-experimental"&gt;JEP 404: Generational Shenandoah (Experimental)&lt;/h2&gt;&#10;&lt;p&gt;Shenandoah is a Garbage Collector (GC) originally developed by RedHat and included in OpenJDK. It reduces GC pause times by performing evacuation work concurrently to application threads.&lt;/p&gt;</description></item><item><title>Foojay Podcast #63: How do we keep your Java applications up to date and secure?</title><link>https://foojay.io/today/foojay-podcast-63/</link><pubDate>Mon, 16 Dec 2024 12:41:10 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-63/</guid><description>&lt;h2 id="last-month-i-published-a-foojay-article-about-the-risks-in-systems-that-are-stuck-on-old-or-outdated-java-versions-and-got-a-lot-of-feedback-from-developers-most-of-them-want-to-move-on-but-get-stuck-on-management-decisions-outdated-production-environments-or-one-of-the-many-other-reasons-that-keep-systems-stuck-on-old-java-versions-and-dependencies"&gt;Last month, I published a Foojay article about &lt;a href="https://foojay.io/today/why-java-8-is-a-ticking-time-bomb-hiding-within-your-organization/"&gt;the risks in systems that are stuck on old or outdated Java versions&lt;/a&gt; and got &lt;a href="https://foojay.io/today/how-organizations-became-stuck-on-outdated-java-versions/"&gt;a lot of feedback from developers&lt;/a&gt;. Most of them want to move on but get stuck on management decisions, outdated production environments, or one of the many other reasons that keep systems stuck on old Java versions and dependencies.&lt;/h2&gt;&#10;&lt;p&gt;Do you want to bring your system from Java 8 to 23? Did you know that Java 17 already has 13 security releases? And that you can use tools like OpenRewrite to help you update your code?&lt;/p&gt;</description></item><item><title>Builder Pattern Simplicity with JEP-455 Primitive Types</title><link>https://foojay.io/today/exploring-new-features-in-jdk-23-builder-pattern-simplicity-with-jep-455-primitive-types-in-patterns-instanceof-and-switch-preview/</link><pubDate>Thu, 10 Oct 2024 10:54:08 +0000</pubDate><guid>https://foojay.io/today/exploring-new-features-in-jdk-23-builder-pattern-simplicity-with-jep-455-primitive-types-in-patterns-instanceof-and-switch-preview/</guid><description>&lt;p&gt;&lt;strong&gt;The runtime initiation of any program requires allocating a given memory and after many additional steps the first object could be created.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;In a &lt;a href="https://foojay.io/today/exploring-new-features-in-jdk-23-factory-pattern-with-flexible-constructor-bodies-with-jep-482/"&gt;previous post&lt;/a&gt;, we explored how to improve maintainability of complex creation processes by using the factory creational pattern[4] and JEP-482, flexible constructor bodies.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;The factory design may be a good fit for many cases but it may also create obstacles due to the pattern code centralized nature.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Null object pattern to avoid null pointer exception with JEP-455</title><link>https://foojay.io/today/exploring-new-features-in-jdk-23-null-object-pattern-to-avoid-null-pointer-exception-with-jep-455/</link><pubDate>Fri, 04 Oct 2024 06:19:18 +0000</pubDate><guid>https://foojay.io/today/exploring-new-features-in-jdk-23-null-object-pattern-to-avoid-null-pointer-exception-with-jep-455/</guid><description>&lt;p&gt;&lt;strong&gt;The newest release JDK 23 [2] comes with a neat extension to pattern matching for switch and instanceof statements, JEP-455: Primitive Types in Patterns, instanceof and switch [1]. While the introduction of pattern matching can be considered a crucial element in moving the Java platform into a functional paradigm, it introduced several limitations.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Using reference object types or objects only for switch and instanceof statements slightly reduced the possibilities of its utilization. This has had an impact on its use in building code based on design patterns, including refactoring.&lt;/p&gt;</description></item><item><title>JDK 23: Factory Pattern with Flexible Constructor Bodies</title><link>https://foojay.io/today/exploring-new-features-in-jdk-23-factory-pattern-with-flexible-constructor-bodies-with-jep-482/</link><pubDate>Wed, 25 Sep 2024 11:14:01 +0000</pubDate><guid>https://foojay.io/today/exploring-new-features-in-jdk-23-factory-pattern-with-flexible-constructor-bodies-with-jep-482/</guid><description>&lt;p&gt;Since the introduction of the new JDK release cadence, we have seen an incredible amount of new enhancements added to each JDK cycle, kicking the Java platform back on track compared to other languages.&lt;/p&gt;&#10;&lt;p&gt;Source code maintainability plays a very important role as complexity of nowadays projects increases. Yes, design patterns, spelled forward and backward many times, but forgotten at the same time due to various reasons.&lt;/p&gt;&#10;&lt;p&gt;Let&amp;rsquo;s take a look at one particular brand new preview feature added to the latest JDK release 23 [2], JEP-482: Flexible Constructor Bodies [1] in its second iteration.&lt;/p&gt;</description></item><item><title>Java 23 Has Arrived, And It Brings a Truckload of Changes</title><link>https://foojay.io/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://foojay.io/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;&#10;&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;&#10;&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 23: What’s New?</title><link>https://foojay.io/today/java-23-whats-new/</link><pubDate>Wed, 04 Sep 2024 09:19:35 +0000</pubDate><guid>https://foojay.io/today/java-23-whats-new/</guid><description>&lt;p&gt;&lt;strong&gt;As soon as Java 23 is out, it&amp;rsquo;ll be time to walk through all the functionalities that this version bring to us as developers.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;First of all, something has happened that, to my knowledge, has never happened before in a Java release: a preview feature has been removed! The String Templates feature, which appeared as a preview feature in Java 21, has been removed. A global redesign of this feature will be carried out, as it had given rise to much debate and didn&amp;rsquo;t seem to meet the community&amp;rsquo;s expectations.&lt;/p&gt;</description></item><item><title>Exploring New Features in JDK 23: Simplifying Java with Module Import Declarations with JEP 476</title><link>https://foojay.io/today/exploring-new-features-in-jdk-23-simplifying-java-with-module-import-declarations-with-jep-476/</link><pubDate>Thu, 20 Jun 2024 16:14:08 +0000</pubDate><guid>https://foojay.io/today/exploring-new-features-in-jdk-23-simplifying-java-with-module-import-declarations-with-jep-476/</guid><description>&lt;p&gt;As Java evolves, simplifying code and improving developer productivity remain priorities.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://openjdk.org/jeps/476" target="_blank" rel="noopener noreferrer"&gt;JEP 476&lt;/a&gt; introduces a new feature in JDK 23: Module Import Declarations.&lt;/p&gt;&#10;&lt;p&gt;This feature aims to streamline the process of importing multiple packages from a module, enhancing code readability and reducing boilerplate.&lt;/p&gt;&#10;&lt;h3 id="what-is-jep-476"&gt;&lt;strong&gt;What is JEP 476?&lt;/strong&gt;&lt;/h3&gt;&#10;&lt;p&gt;JEP 476 proposes the ability to import all packages exported by a module with a single declaration. This is particularly useful for developers who frequently use multiple packages from the same module, as it eliminates the need for numerous individual import statements.&lt;/p&gt;</description></item><item><title>JUG Munich hosts the JCP Executive Committee meeting to 25th anniversary of JCP</title><link>https://foojay.io/today/jug-munich-hosts-the-jcp-executive-committee-meeting-to-25th-anniversary-of-jcp/</link><pubDate>Sun, 14 Apr 2024 19:40:41 +0000</pubDate><guid>https://foojay.io/today/jug-munich-hosts-the-jcp-executive-committee-meeting-to-25th-anniversary-of-jcp/</guid><description>&lt;p&gt;&lt;strong&gt;The Java Community Process (JCP) was established in 1998 to formalize the development process of the Java platform, where all interested parties can openly participate in the development of specification standards.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;For many reasons, the JCP process [1] has decided to organize at least two face-to-face meetings of the Java Executive Committee per year. These meetings not only contain a very warm exchange of ideas, but are also very helpful in identifying future challenges. These meetings bring executives from all interested parties very close to the Java Community, as their feedback is very important to future platform development.&lt;/p&gt;</description></item><item><title>Java 22: What’s New?</title><link>https://foojay.io/today/java-22-whats-new/</link><pubDate>Mon, 18 Mar 2024 14:10:04 +0000</pubDate><guid>https://foojay.io/today/java-22-whats-new/</guid><description>&lt;p&gt;As soon as Java 22 is out, it&amp;rsquo;ll be time to walk through all the functionalities that this version bring to us as developers.&lt;/p&gt;&#10;&lt;h2 id="jep-461---stream-gatherers-preview"&gt;JEP 461 - Stream Gatherers (Preview)&lt;/h2&gt;&#10;&lt;p&gt;Enhances the Stream API with support for custom intermediate operations. This is a preview API.&lt;/p&gt;&#10;&lt;p&gt;The Stream API provides a fixed set of intermediate and terminal operations. It allows terminal operations to be extended via the &lt;code&gt;Stream::collect(Collector)&lt;/code&gt; method, but does not allow intermediate operations to be extended. Some operations are missing or others are possible via a set of operations or via an operation that doesn&amp;rsquo;t fully match what&amp;rsquo;s needed.&lt;/p&gt;</description></item><item><title>Foojay Podcast #45: Welcome to Java 22</title><link>https://foojay.io/today/foojay-podcast-45/</link><pubDate>Mon, 18 Mar 2024 10:31:53 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-45/</guid><description>&lt;p&gt;Last September, we got Java 21, a Long Term Support (LTS) version with eight new big features and seven incubator or preview features.&lt;/p&gt;&#10;&lt;p&gt;Does Java 22 also bring that much innovation, or is it just a bug-fix release?&lt;/p&gt;&#10;&lt;p&gt;And what needs to be done to get such a release published on time? Let&amp;rsquo;s find out&amp;hellip;&lt;/p&gt;&#10;&lt;h2 id="video"&gt;Video&lt;/h2&gt;&#10;&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;&#10;&#9;&#9;&#9;&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/_NYuuoCQgO8?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;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;h2 id="podcast-apps"&gt;Podcast Apps&lt;/h2&gt;&#10;&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Revolutionising Java Collections: The Advent of Sequenced Collections in Java 21</title><link>https://foojay.io/today/revolutionising-java-collections-the-advent-of-sequenced-collections-in-java-21/</link><pubDate>Tue, 26 Dec 2023 14:07:42 +0000</pubDate><guid>https://foojay.io/today/revolutionising-java-collections-the-advent-of-sequenced-collections-in-java-21/</guid><description>&lt;p&gt;&lt;strong&gt;Java has been a staple in the software development world for decades, renowned for its robustness and vast ecosystem. However, some seasoned Java developers have encountered limitations within its collections framework, particularly when dealing with ordered elements.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Enter JEP 431. JEP 431, part of the Java Enhancement Proposal system, represents a significant advancement in Java&amp;rsquo;s ongoing evolution.&lt;/p&gt;&#10;&lt;p&gt;The Java Enhancement Proposal system is a process for proposing, reviewing, and implementing new features in the Java programming language.&lt;/p&gt;</description></item><item><title>Java 21 - JEP 445 - Unnamed Classes and Instance Main Methods</title><link>https://foojay.io/today/java-21-jep-445-unnamed-classes-and-instance-main-methods/</link><pubDate>Wed, 25 Oct 2023 09:25:48 +0000</pubDate><guid>https://foojay.io/today/java-21-jep-445-unnamed-classes-and-instance-main-methods/</guid><description>&lt;p&gt;Java 21, released on September 19th, 2023, brings many new features, 8 which are fully integrated and 7 which are incubator or preview.&lt;/p&gt;&#10;&lt;p&gt;In this article, I want to highlight one of those preview features: &lt;a href="https://openjdk.org/jeps/445" target="_blank" rel="noopener noreferrer"&gt;Java Enhancement Proposal (JEP) 445: &amp;ldquo;Unnamed Classes and Instance Main Methods&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s a preview feature, meaning you need extra flags to use it. The goal of JEP 445 is to make it easier to get started with Java, as it&amp;rsquo;s all about reducing the number of keywords when you write, for instance, your very first HelloWorld Java code.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>AsyncGetCallTrace Reworked: Frame by Frame Iterative Touch!</title><link>https://foojay.io/today/asyncgetcalltrace-reworked-frame-by-frame-with-an-iterative-touch/</link><pubDate>Thu, 10 Aug 2023 09:43:33 +0000</pubDate><guid>https://foojay.io/today/asyncgetcalltrace-reworked-frame-by-frame-with-an-iterative-touch/</guid><description>&lt;p&gt;&lt;strong&gt;AsyncGetCallTrace is an API to obtain the top &lt;code&gt;n&lt;/code&gt; Java frames of a thread asynchronously in a signal handler.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;This API is widely used but has its problems, see JEP 435 &lt;a href="https://foojay.io/today/author/johannes-bechberger/"&gt;and my various articles on Foojay.io&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;My original approach with my JEP proposal was to build a replacement of the API, which could be used as a drop-in for AsyncGetCallTrace. Still a single method that populates a preallocated frame list:&lt;br&gt;&#10;&lt;img src="https://foojay.io/today/asyncgetcalltrace-reworked-frame-by-frame-with-an-iterative-touch/asgct_asgst-2000x1125-6c596253.jpg" alt="" width="1600" height="900" loading="lazy" decoding="async"&gt;&lt;/p&gt;</description></item><item><title>Hidden and Not-So-Hidden Gems In Java 20</title><link>https://foojay.io/today/hidden-and-not-so-hidden-gems-in-java-20/</link><pubDate>Wed, 03 May 2023 14:32:45 +0000</pubDate><guid>https://foojay.io/today/hidden-and-not-so-hidden-gems-in-java-20/</guid><description>&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s see the preview and incubator JEPs in Java 20, as well as many smaller enhancements, bug fixes, and deprecations.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;March 2023 marked the latest feature release of the Java platform, which was delivered on time through the six-month release cadence as Java 20. Like Java 19, which became generally available in September 2022, Java 20 targeted JEPs—seven, in this case—from the &lt;a href="https://openjdk.org/projects/panama/" target="_blank" rel="noopener noreferrer"&gt;Panama&lt;/a&gt;, &lt;a href="https://openjdk.org/projects/amber/" target="_blank" rel="noopener noreferrer"&gt;Amber&lt;/a&gt;, and &lt;a href="https://wiki.openjdk.org/display/loom" target="_blank" rel="noopener noreferrer"&gt;Loom&lt;/a&gt; projects.&lt;/p&gt;&#10;&lt;p&gt;I am using the Java 20 jshell tool to demonstrate the code in this article. To follow along, &lt;a href="https://foojay.io/download/"&gt;download JDK 20&lt;/a&gt;, fire up your terminal, check your version, and run jshell. Note that you might see a newer version of the JDK; that&amp;rsquo;s okay.&lt;/p&gt;</description></item><item><title>It's Java 20 Release Day! Here's What's New</title><link>https://foojay.io/today/its-java-20-release-day-heres-whats-new/</link><pubDate>Tue, 21 Mar 2023 06:40:34 +0000</pubDate><guid>https://foojay.io/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;&#10;&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;&#10;&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;&#10;&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>An Introduction to Scoped Values in Java</title><link>https://foojay.io/today/an-introduction-to-scoped-values-in-java/</link><pubDate>Mon, 20 Feb 2023 11:32:20 +0000</pubDate><guid>https://foojay.io/today/an-introduction-to-scoped-values-in-java/</guid><description>&lt;p&gt;After moving to the six-month release cadence, the Java language has entered a rapid development process.&lt;/p&gt;&#10;&lt;p&gt;While the process introduces many new features, these new features sometimes cause updates to existing APIs and sometimes result in the development of new APIs.&lt;/p&gt;&#10;&lt;p&gt;An example of the second is &lt;a href="https://openjdk.org/jeps/429" title="Scoped Values" target="_blank" rel="noopener noreferrer"&gt;Scoped Values&lt;/a&gt; which has been included in the JDK since Java 20 as an incubator API.&lt;/p&gt;&#10;&lt;h3 id="why-were-scoped-values-proposed"&gt;Why were Scoped Values proposed?&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://openjdk.org/jeps/425" title="Virtual threads" target="_blank" rel="noopener noreferrer"&gt;Virtual threads&lt;/a&gt; became a part of JDK as a preview feature in Java 19.&lt;/p&gt;</description></item><item><title>Java Sealed Classes: Building Robust and Secure Applications</title><link>https://foojay.io/today/java-sealed-classes-in-action-building-robust-and-secure-applications/</link><pubDate>Mon, 20 Feb 2023 11:11:07 +0000</pubDate><guid>https://foojay.io/today/java-sealed-classes-in-action-building-robust-and-secure-applications/</guid><description>&lt;p&gt;Java sealed classes were introduced in Java 15 as a way to restrict the inheritance hierarchy of a class or interface.&lt;/p&gt;&#10;&lt;p&gt;A sealed class or interface restricts the set of classes that can implement or extend it, which can help prevent bugs and make code more maintainable.&lt;/p&gt;&#10;&lt;p&gt;Suppose you&amp;rsquo;re building an e-commerce application that supports different payment methods, such as credit cards, PayPal, and Bitcoin. You could define a sealed class called PaymentMethod that permits various subclasses for each payment method:&lt;/p&gt;</description></item><item><title>AsyncGetStackTrace: A better Stack Trace API for the JVM</title><link>https://foojay.io/today/asyncgetstacktrace-a-better-stack-trace-api-for-the-jvm/</link><pubDate>Thu, 26 Jan 2023 09:16:06 +0000</pubDate><guid>https://foojay.io/today/asyncgetstacktrace-a-better-stack-trace-api-for-the-jvm/</guid><description>&lt;p&gt;&lt;em&gt;This article is the basis for my upcoming talk at&lt;/em&gt; &lt;a href="https://fosdem.org/2023/schedule/event/asyncgetstacktrace_the_improved_version_of_asyncgetcalltrace_jep_435/" target="_blank" rel="noopener noreferrer"&gt;&lt;em&gt;FOSDEM 2023,&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;ldquo;AsyncGetStackTrace: The Improved Version Of AsyncGetCallTrace (JEP 435),&lt;a href="https://fosdem.org/2023/schedule/event/asyncgetstacktrace_the_improved_version_of_asyncgetcalltrace_jep_435/" target="_blank" rel="noopener noreferrer"&gt;&amp;rdquo;&lt;/a&gt; and is based on JEP Candidate 435.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Consider you want to write a profiler to profile Java applications. Why? Because you think that the existing ones &lt;a href="http://psy-lob-saw.blogspot.com/2016/02/why-most-sampling-java-profilers-are.html" target="_blank" rel="noopener noreferrer"&gt;&amp;quot;[&amp;hellip;] Are Fucking Terrible&amp;quot;&lt;/a&gt; or &lt;a href="https://youtu.be/7IkHIqPeFjY?list=PLLLT4NxU7U1QYiqanOw48h0VUjlUvqCCv&amp;amp;t=919" target="_blank" rel="noopener noreferrer"&gt;&amp;quot;[&amp;hellip;] Broken&amp;quot;&lt;/a&gt;. &lt;em&gt;Or you want to start a &lt;a href="https://mostlynerdless.de/blog/tag/writing-a-profiler-from-scratch/" target="_blank" rel="noopener noreferrer"&gt;blog series&lt;/a&gt;&lt;/em&gt; on writing a profiler from scratch to learn their inner workings (hi there,**regular readers)&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>