<?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://foojayio.github.io/website/today/category/jeps/</link><description>Recent content in JEPs on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 03 Jul 2026 12:15:12 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/jeps/index.xml" rel="self" type="application/rss+xml"/><item><title>Your TLS Stack Is Lying to You About Zero-Copy</title><link>https://foojayio.github.io/website/today/your-tls-stack-is-lying-about-zero-copy/</link><pubDate>Wed, 10 Jun 2026 12:00:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/your-tls-stack-is-lying-about-zero-copy/</guid><description>&lt;h2 id="h2-0-the-no-waste-compute-constraint"&gt;The &amp;ldquo;No Waste Compute&amp;rdquo; Constraint&lt;/h2&gt;
&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;
&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://foojayio.github.io/website/today/banned-threadlocal-java-scoped-values/</link><pubDate>Thu, 28 May 2026 09:36:00 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&lt;hr&gt;
&lt;p&gt;When I started designing the &lt;strong&gt;Exeris Kernel&lt;/strong&gt; &amp;mdash; a next-generation, zero-copy runtime built for Java 26+ &amp;mdash; I established one non-negotiable architectural law: &lt;strong&gt;&amp;ldquo;No Waste Compute.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&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://foojayio.github.io/website/today/java-for-scripting/</link><pubDate>Mon, 23 Mar 2026 10:00:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-for-scripting/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/java-for-scripting/java-script-cover-700x467.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;h2 id="h2-0-the-scripting-dilemma"&gt;The Scripting Dilemma&lt;/h2&gt;
&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;
&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;
&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://foojayio.github.io/website/today/how-is-leyden-improving-java-performance-part-1-of-3/</link><pubDate>Tue, 17 Mar 2026 12:00:45 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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://foojayio.github.io/website/today/java-26-whats-new/</link><pubDate>Tue, 03 Mar 2026 10:00:28 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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;
&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://foojayio.github.io/website/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://foojayio.github.io/website/today/gotta-code-em-all-how-java-evolved-beyond-verbosity-celebrating-30-years-of-pokemon/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/gotta-code-em-all-how-java-evolved-beyond-verbosity-celebrating-30-years-of-pokemon/pokemon01-1024x640.jpg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Happy 30th Anniversary to &lt;strong&gt;Pokémon&lt;/strong&gt;! 🎉&lt;/p&gt;
&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;
&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://foojayio.github.io/website/today/project-panama-for-newbies-part-2/</link><pubDate>Fri, 02 Jan 2026 01:21:00 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" width="218" height="407" src="panama_part2.png" alt="" class="wp-image-46434" style="width:140px;height:261px"&gt;
&lt;/figure&gt;
&lt;h2 id="h2-0-introduction"&gt;Introduction&lt;/h2&gt;
&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://foojayio.github.io/website/today/project-panama-for-newbies-part-1/"&gt;Part 1&lt;/a&gt;
 first.&lt;/p&gt;
&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://foojayio.github.io/website/today/project-panama-for-newbies-part-1/</link><pubDate>Thu, 01 Jan 2026 09:11:00 +0000</pubDate><guid>https://foojayio.github.io/website/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.
&lt;img src="https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/duke_and_panama.png" alt="Java&amp;rsquo;s Project Panama" loading="lazy"&gt;
&lt;/p&gt;
&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://foojayio.github.io/website/today/java-25-whats-new/</link><pubDate>Wed, 03 Dec 2025 09:02:49 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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;
&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://foojayio.github.io/website/today/java-24-whats-new/</link><pubDate>Wed, 26 Feb 2025 09:58:53 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&lt;p&gt;Java 24 contains not less than 24 JEPs, a record and above all an eponymous figure!&lt;/p&gt;
&lt;h2 id="h2-0-jep-404-generational-shenandoah-experimental"&gt;JEP 404: Generational Shenandoah (Experimental)&lt;/h2&gt;
&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://foojayio.github.io/website/today/foojay-podcast-63/</link><pubDate>Mon, 16 Dec 2024 12:41:10 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-63/</guid><description>&lt;h2 id="h2-0-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://foojayio.github.io/website/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://foojayio.github.io/website/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;
&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://foojayio.github.io/website/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://foojayio.github.io/website/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;
&lt;p&gt;&lt;strong&gt;In a &lt;a href="https://foojayio.github.io/website/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;
&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://foojayio.github.io/website/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://foojayio.github.io/website/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;
&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://foojayio.github.io/website/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://foojayio.github.io/website/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;
&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;
&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://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 23: What’s New? | Foojay.io today</title><link>https://foojayio.github.io/website/today/java-23-whats-new/</link><pubDate>Wed, 04 Sep 2024 09:19:35 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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://foojayio.github.io/website/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://foojayio.github.io/website/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;
&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;
&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;
&lt;h3 id="h3-0-what-is-jep-476"&gt;&lt;strong&gt;What is JEP 476?&lt;/strong&gt;&lt;/h3&gt;
&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://foojayio.github.io/website/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://foojayio.github.io/website/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;
&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://foojayio.github.io/website/today/java-22-whats-new/</link><pubDate>Mon, 18 Mar 2024 14:10:04 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&lt;h2 id="h2-0-jep-461-stream-gatherers-preview"&gt;JEP 461 - Stream Gatherers (Preview)&lt;/h2&gt;
&lt;p&gt;Enhances the Stream API with support for custom intermediate operations. This is a preview API.&lt;/p&gt;
&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://foojayio.github.io/website/today/foojay-podcast-45/</link><pubDate>Mon, 18 Mar 2024 10:31:53 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&lt;p&gt;Does Java 22 also bring that much innovation, or is it just a bug-fix release?&lt;/p&gt;
&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;
&lt;h2 id="h2-0-video"&gt;Video&lt;/h2&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/_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;
		&lt;/div&gt;

&lt;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&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://foojayio.github.io/website/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://foojayio.github.io/website/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;
&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;
&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://foojayio.github.io/website/today/java-21-jep-445-unnamed-classes-and-instance-main-methods/</link><pubDate>Wed, 25 Oct 2023 09:25:48 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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;
&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://foojayio.github.io/website/today/asyncgetcalltrace-reworked-frame-by-frame-with-an-iterative-touch/</link><pubDate>Thu, 10 Aug 2023 09:43:33 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&lt;p&gt;This API is widely used but has its problems, see JEP 435 &lt;a href="https://foojayio.github.io/website/today/author/johannes-bechberger/"&gt;and my various articles on Foojay.io&lt;/a&gt;
.&lt;/p&gt;
&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;
&lt;img src="https://mostlynerdless.de/wp-content/uploads/2023/08/asgct_asgst-2000x1125.png" alt="" loading="lazy"&gt;
&lt;/p&gt;</description></item><item><title>Hidden and Not-So-Hidden Gems In Java 20</title><link>https://foojayio.github.io/website/today/hidden-and-not-so-hidden-gems-in-java-20/</link><pubDate>Wed, 03 May 2023 14:32:45 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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&amp;mdash;seven, in this case&amp;mdash;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;
&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://foojayio.github.io/website/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 | 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>An Introduction to Scoped Values in Java</title><link>https://foojayio.github.io/website/today/an-introduction-to-scoped-values-in-java/</link><pubDate>Mon, 20 Feb 2023 11:32:20 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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;
&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;
&lt;h3 id="h3-0-why-were-scoped-values-proposed"&gt;Why were Scoped Values proposed?&lt;/h3&gt;
&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://foojayio.github.io/website/today/java-sealed-classes-in-action-building-robust-and-secure-applications/</link><pubDate>Mon, 20 Feb 2023 11:11:07 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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;
&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://foojayio.github.io/website/today/asyncgetstacktrace-a-better-stack-trace-api-for-the-jvm/</link><pubDate>Thu, 26 Jan 2023 09:16:06 +0000</pubDate><guid>https://foojayio.github.io/website/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;
&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><item><title>Building Project Panama's jextract tool by yourself</title><link>https://foojayio.github.io/website/today/building-project-panamas-jextract-tool-by-yourself/</link><pubDate>Thu, 09 Jun 2022 14:22:47 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-project-panamas-jextract-tool-by-yourself/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Absorb what is useful, discard what is useless and add what is specifically your own. &amp;ndash; Bruce Lee&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Do you want to build Project Panama&amp;rsquo;s &lt;a href="https://github.com/openjdk/jextract" target="_blank" rel="noopener noreferrer"&gt;Jextract&lt;/a&gt;
 tool by yourself? I can show you how!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve seen any of my past &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-3/"&gt;articles&lt;/a&gt;
 on Project Panama I&amp;rsquo;ve mentioned a really convenient tool called &lt;code&gt;jextract&lt;/code&gt; that can generate Java binding code that represents native functions or variables (symbols) from C libraries.&lt;/p&gt;
&lt;p&gt;This alleviates the developer&amp;rsquo;s need of creating binding code by hand. By passing in a C header file (.h extension) &lt;code&gt;jextract&lt;/code&gt; can generate source code or compiled Java classes.&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>Java Panama Polyglot (Rust) Part 4</title><link>https://foojayio.github.io/website/today/java-panama-polyglot-rust-part-4/</link><pubDate>Thu, 26 May 2022 08:33:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-panama-polyglot-rust-part-4/</guid><description>&lt;p&gt;Hello and welcome to the final article of the &lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/java-panama-polyglot-part1/"&gt;Java Panama Polyglot&lt;/a&gt;
&lt;/strong&gt; series, where we are presenting quick tutorials or recipes on how to access native libraries written in other languages.&lt;/p&gt;
&lt;p&gt;In this article you will be using Project Panama to talk to the &lt;a href="https://www.rust-lang.org" target="_blank" rel="noopener noreferrer"&gt;Rust&lt;/a&gt;
 language.&lt;/p&gt;
&lt;p&gt;If you are new to Java&amp;rsquo;s Foreign Function Access APIs (&lt;a href="https://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Project&lt;/a&gt;
&lt;a href="https://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Panama&lt;/a&gt;
) check out &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/"&gt;Panama4Newbies&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-panama-polyglot-part-3/"&gt;Part 3&lt;/a&gt;
 you had a chance to learn about how to use Java Project Panama&amp;rsquo;s abilities to access the locally installed Python interpreter.&lt;/p&gt;</description></item><item><title>Java Panama Polyglot (Python/Tensorflow) Part 3</title><link>https://foojayio.github.io/website/today/java-panama-polyglot-part-3/</link><pubDate>Tue, 26 Apr 2022 04:42:58 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-panama-polyglot-part-3/</guid><description>&lt;p&gt;Hello and welcome back to the &lt;strong&gt;&lt;a href="https://foojayio.github.io/website/today/java-panama-polyglot-part1/"&gt;Java Panama Polyglot&lt;/a&gt;
&lt;/strong&gt; series where we are presenting quick tutorials or recipes on how to access native libraries written in other languages.&lt;/p&gt;
&lt;p&gt;If you are new to Java&amp;rsquo;s Foreign Function Access APIs (&lt;a href="https://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Project&lt;/a&gt;
&lt;a href="https://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Panama&lt;/a&gt;
) check out: &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/"&gt;Panama4Newbies&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-panama-polyglot-swift-part-2/"&gt;Part 2&lt;/a&gt;
 you got a chance to learn about how to use Java Project Panama&amp;rsquo;s (foreign function interface APIs) abilities to access native libraries written in Apple&amp;rsquo;s &lt;a href="https://www.swift.org" target="_blank" rel="noopener noreferrer"&gt;Swift language&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Java Panama Polyglot (Swift) Part 2</title><link>https://foojayio.github.io/website/today/java-panama-polyglot-swift-part-2/</link><pubDate>Wed, 13 Apr 2022 15:34:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-panama-polyglot-swift-part-2/</guid><description>&lt;p&gt;Hello and welcome back to the &lt;strong&gt;Java Panama Polyglot&lt;/strong&gt; series where we will be presenting quick tutorials or recipes on how to access native libraries written in other languages.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/java-panama-polyglot-part1/"&gt;Part 1&lt;/a&gt;
 you got a chance to learn about how to use Java &lt;a href="https://jdk.java.net/panama/" target="_blank" rel="noopener noreferrer"&gt;Project Panama&lt;/a&gt;
&amp;rsquo;s (foreign function interface) abilities to access native libraries written in C++. Today, we will be looking at Java code being able to talk to Apple&amp;rsquo;s &lt;a href="https://developer.apple.com/swift/" target="_blank" rel="noopener noreferrer"&gt;Swift&lt;/a&gt;
 language.&lt;/p&gt;</description></item><item><title>Java Panama Polyglot (C++) Part 1</title><link>https://foojayio.github.io/website/today/java-panama-polyglot-part1/</link><pubDate>Wed, 06 Apr 2022 15:41:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-panama-polyglot-part1/</guid><description>&lt;figure class="wp-block-image size-full is-resized"&gt;
 &lt;img fetchpriority="high" decoding="async" src="polyglot.png" alt="" class="wp-image-55283" width="469" height="112"&gt;
&lt;/figure&gt;
&lt;p&gt;Hello and welcome to the &lt;strong&gt;Java Panama Polyglot&lt;/strong&gt; series where we will be presenting quick tutorials or recipes on how to access native libraries written in other languages.&lt;/p&gt;
&lt;p&gt;For example, you will learn about Java Project Panama&amp;rsquo;s (foreign function interface) abilities to access native libraries written in C++, Swift, Python, and others.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is Polyglot?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Have you heard of polyglot as it relates to developing &lt;a href="https://en.wikipedia.org/wiki/Solution_stack" target="_blank" rel="noopener noreferrer"&gt;full stack&lt;/a&gt;
 applications? If your answer is &lt;strong&gt;yes&lt;/strong&gt;, then you probably know about the programming languages needed to build an enterprise web application.&lt;/p&gt;</description></item><item><title>Project Panama for Newbies (Part 4)</title><link>https://foojayio.github.io/website/today/project-panama-for-newbies-part-4/</link><pubDate>Thu, 24 Feb 2022 08:34:52 +0000</pubDate><guid>https://foojayio.github.io/website/today/project-panama-for-newbies-part-4/</guid><description>&lt;p&gt;&lt;strong&gt;Updated December 31, 2025:&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;/p&gt;
&lt;p&gt;Welcome to Part 4 of Java&amp;rsquo;s Project Panama for newbies! If you&amp;rsquo;ve been following &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-1/"&gt;this&lt;/a&gt;
 &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-2/"&gt;series&lt;/a&gt;
 of &lt;a href="https://foojayio.github.io/website/today/project-panama-for-newbies-part-3/"&gt;posts&lt;/a&gt;
 on how to use Java&amp;rsquo;s Project Panama APIs you probably have noticed that all of the examples thus far demonstrate how Java code can execute C code by using the &lt;a href="https://github.com/openjdk/panama-foreign/blob/d8c0fe5918cb1c6c744eb26797ea4fa04142c237/doc/panama_ffi.md#c-linker" target="_blank" rel="noopener noreferrer"&gt;linker&lt;/a&gt;
&amp;rsquo;s &lt;code&gt;downCall()&lt;/code&gt; method.&lt;/p&gt;</description></item><item><title>You're Running Untrusted Code!</title><link>https://foojayio.github.io/website/today/running-untrusted-code/</link><pubDate>Mon, 17 Jan 2022 08:28:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/running-untrusted-code/</guid><description>&lt;p&gt;Last December, Log4Shell shortened the nights of many people in the JVM world. Worse, using the earthquake analogy caused many aftershocks after the initial quake.&lt;/p&gt;
&lt;p&gt;I immediately made the connection between Log4Shell and the Security Manager. At first, I didn&amp;rsquo;t want to write about it, but I&amp;rsquo;ve received requests to do so, and I couldn&amp;rsquo;t walk away.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/nicolas_frankel/status/1471140080366632968" target="_blank" rel="noopener noreferrer"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;[&lt;/p&gt;
&lt;img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-51338" src="johannes-rab-700x119.png" alt="" width="700" height="119"&gt;
&lt;p&gt;](&lt;a href="https://twitter.com/nicolas_frankel/status/1471140080366632968" target="_blank" rel="noopener noreferrer"&gt;https://twitter.com/nicolas_frankel/status/1471140080366632968&lt;/a&gt;
)&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;As a reminder, the Oracle team deprecated the Security Manager in Java 17. One of the arguments it based its decision on is that it was initially designed to protect against applets. Applets were downloaded from the Internet, so they had to be considered untrusted code. Hence, we had to run them in a sandbox.&lt;/p&gt;</description></item><item><title>New Java 17 Features for Improved Security and Serialization</title><link>https://foojayio.github.io/website/today/new-java-17-features-for-improved-security-and-serialization/</link><pubDate>Thu, 02 Dec 2021 08:06:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/new-java-17-features-for-improved-security-and-serialization/</guid><description>&lt;p&gt;In December 2020, I wrote the article&lt;a href="https://snyk.io/blog/serialization-and-deserialization-in-java/" target="_blank" rel="noopener noreferrer"&gt;Serialization and deserialization in Java: explaining the Java deserialize vulnerability&lt;/a&gt;
 about the problems Java has with its custom serialization implementation. The serialization framework is so deeply embedded inside Java that knowing how dangerous some implementation can be is important. Insecure deserialization can lead to arbitrary code executions if a gadget chain is created from your classpath classes.&lt;/p&gt;
&lt;p&gt;Recently, Java 17 &amp;mdash; the new LTS version &amp;mdash; was released. But how do the new features impact this problem, and can we prevent deserialization vulnerabilities better using these features?&lt;/p&gt;</description></item><item><title>Getting Started with Java 17 and IntelliJ IDEA</title><link>https://foojayio.github.io/website/today/getting-started-with-java-17-and-intellij-idea/</link><pubDate>Tue, 14 Sep 2021 09:20:56 +0000</pubDate><guid>https://foojayio.github.io/website/today/getting-started-with-java-17-and-intellij-idea/</guid><description>&lt;p&gt;A new Java release every six months can be exciting, overwhelming, or both. Given that &lt;a href="https://openjdk.java.net/projects/jdk/17/" target="_blank" rel="noopener noreferrer"&gt;Java 17&lt;/a&gt;
 is also an &lt;a href="https://www.oracle.com/java/technologies/java-se-support-roadmap.html" target="_blank" rel="noopener noreferrer"&gt;LTS&lt;/a&gt;
 release, it&amp;rsquo;s not just the developers but enterprises also noticing it. If you have been &lt;a href="https://www.ted.com/talks/tim_urban_inside_the_mind_of_a_master_procrastinator" target="_blank" rel="noopener noreferrer"&gt;waiting&lt;/a&gt;
 to move on from Java 8 or 11, now is the time to weigh its advantages.&lt;/p&gt;
&lt;p&gt;In this article, I will limit the coverage of Java 17 to its language features &amp;ndash; &lt;a href="https://openjdk.java.net/jeps/409" target="_blank" rel="noopener noreferrer"&gt;Sealed Classes&lt;/a&gt;
 and &lt;a href="https://openjdk.java.net/jeps/406" target="_blank" rel="noopener noreferrer"&gt;Pattern Matching for switch&lt;/a&gt;
. I&amp;rsquo;ll cover what these features are, why you might need them, and how you can start using them in &lt;a href="https://blog.jetbrains.com/idea/2021/08/intellij-idea-2021-2-1/" target="_blank" rel="noopener noreferrer"&gt;IntelliJ IDEA&lt;/a&gt;
. I will also highlight how these features can reduce the &lt;em&gt;cognitive complexity&lt;/em&gt; for developers. You can use &lt;a href="https://openjdk.java.net/projects/jdk/17/" target="_blank" rel="noopener noreferrer"&gt;this link&lt;/a&gt;
 for a comprehensive list of all the new Java 17 features.&lt;/p&gt;</description></item><item><title>JEP 411: Java's Security Model and the Principle of Least Privilege</title><link>https://foojayio.github.io/website/today/jep-411-what-it-means-for-javas-security-model/</link><pubDate>Thu, 03 Jun 2021 07:47:51 +0000</pubDate><guid>https://foojayio.github.io/website/today/jep-411-what-it-means-for-javas-security-model/</guid><description>&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/0/07/Swiss_cheese_model.svg" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Java, like most platforms or languages has layers of security, this article intends to look at Java&amp;rsquo;s Authorization layer, which is unlike in other languages, and to distinguish between two different ways this layer is typically utilized, why one is effective while the other isn&amp;rsquo;t and investigate why JEP 411 only considers the least effective method and hopefully increase awareness of the Principle of Least Privilege as it&amp;rsquo;s applied to Java Authorization, improve adoption, encourage people to take advantage of the improved security it provides, as well as prolong its support and possibly even improve it in future.&lt;/p&gt;</description></item><item><title>Why JEP 411 Will Have a Negative Impact on Java Security</title><link>https://foojayio.github.io/website/today/why-jep-411-will-have-a-negative-impact-on-java-security/</link><pubDate>Sat, 22 May 2021 07:43:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/why-jep-411-will-have-a-negative-impact-on-java-security/</guid><description>&lt;p&gt;&lt;em&gt;&lt;a href="https://openjdk.java.net/jeps/411" target="_blank" rel="noopener noreferrer"&gt;JEP 411&lt;/a&gt;
 specifies the &amp;ldquo;deprecation of the Security Manager for removal in a future release. The Security Manager dates from Java 1.0. It has not been the primary means of securing client-side Java code for many years, and it has rarely been used to secure server-side code. To move Java forward, we intend to deprecate the Security Manager for removal in concert with the legacy Applet API (JEP 398).&amp;rdquo; Below, Peter Firmstone describes how this relates to the principle of least privilege and what the impact of this JEP will be. Agree or disagree, add your comments, or your full articles on this topic are also welcome here on Foojay.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Introduction to JVM Unified Logging (JEP-158 / JEP-271)</title><link>https://foojayio.github.io/website/today/introduction-to-jvm-unified-logging-jep-158-jep-271/</link><pubDate>Mon, 01 Mar 2021 17:58:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-jvm-unified-logging-jep-158-jep-271/</guid><description>&lt;p&gt;Unified logging was introduced in JDK 9, and is available for us all, in the JDK 11 LTS. Like other great serviceability feature (&lt;code&gt;jcmd&lt;/code&gt; or JFR) this was inspired by JRockit.&lt;/p&gt;
&lt;p&gt;As a pre-jdk9 user I had my way using the explicit GC logging options. On several occasions it was also useful to toggle other options like tracing class un/loading.&lt;/p&gt;
&lt;p&gt;Starting from JDK 9, the JVM maintainers chose to overhaul the way JVM logs things. I believe that unified logging is great, but after using it I believe its purpose targets more JDK maintainers, eventually library maintainers, than end users. Meanwhile it&amp;rsquo;s likely that one may need to activate GC logs.&lt;/p&gt;</description></item><item><title>Local Variable Type Inference: Declare Var, Not War</title><link>https://foojayio.github.io/website/today/local-variable-type-inference-declare-var-not-war/</link><pubDate>Mon, 04 Jan 2021 08:29:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/local-variable-type-inference-declare-var-not-war/</guid><description>&lt;p&gt;In this article, I will try to explain the new feature, from Java 10, &amp;ldquo;local variable type inference&amp;rdquo;, which also provides the new reserved type name &amp;ldquo;var&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Java is changing rapidly and with the new release cycle of 6 months, we are continually getting new features to try out with every release. In Java 10, a new feature Local-Variable Type Inference was added. It is aimed at reducing boilerplate code and improving readability when declaring local variables with initializers.&lt;/p&gt;</description></item><item><title>What are Hidden Classes in Java 15 And How Are They Used?</title><link>https://foojayio.github.io/website/today/what-are-hidden-classes-in-java-15/</link><pubDate>Thu, 03 Dec 2020 10:15:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/what-are-hidden-classes-in-java-15/</guid><description>&lt;p&gt;As we know, &lt;code&gt;sun.misc.Unsafe&lt;/code&gt; APIs are not recommended to use outside the JDK, with a slight mistake you may cause the JVM to crash. In some cases, code may not be portable across different platforms and many other related problems may occur.&lt;/p&gt;
&lt;p&gt;On the other hand, there are some useful features Unsafe APIs provide and we don&amp;rsquo;t have an alternative for those as a standard language feature. To remove Unsafe API usages, JDK developers provide standard language features, the JDK 15 &amp;ldquo;hidden class&amp;rdquo; is one such feature. After the introduction of hidden classes, &lt;code&gt;sun.misc.Unsafe::defineAnonymousClass&lt;/code&gt; is deprecated in Java 15, which will be removed in future releases.&lt;/p&gt;</description></item><item><title>Seven Ways to Contribute to the OpenJDK</title><link>https://foojayio.github.io/website/today/7-ways-to-contribute-to-openjdk/</link><pubDate>Wed, 18 Nov 2020 08:49:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/7-ways-to-contribute-to-openjdk/</guid><description>&lt;p&gt;A great many developers today are employed working with OpenJDK. If OpenJDK is the background source for your livelihood, you might want to contribute to future development of the OpenJDK.&lt;/p&gt;
&lt;p&gt;There are many ways you can do this. In this article I outline 7 possibilities, ranging from minimal work (because you&amp;rsquo;re too busy to do much, but you&amp;rsquo;d like to do something) to intensive work (participating on OpenJDK development is everything you want to do, it&amp;rsquo;s more than a hobby, you want to contribute to the maximum extent possible).&lt;/p&gt;</description></item><item><title>JDK 15 Hidden Classes (JEP 371) for the JVM</title><link>https://foojayio.github.io/website/today/jdk-15-hidden-classes/</link><pubDate>Fri, 16 Oct 2020 14:03:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/jdk-15-hidden-classes/</guid><description>&lt;p&gt;Unlike &lt;a href="https://foojayio.github.io/website/blog/jdk-15-sealed-classes/"&gt;sealed classes&lt;/a&gt;
, &lt;em&gt;hidden classes&lt;/em&gt; (&lt;a href="https://openjdk.java.net/jeps/371" target="_blank" rel="noopener noreferrer"&gt;JEP 371&lt;/a&gt;
) are a JVM rather than a language-level feature. One of the specific goals of this feature is not to make any changes to the Java language.&lt;/p&gt;
&lt;p&gt;Languages compiled into bytecodes, including Java, often use bytecodes that are generated at runtime, rather than fixing the implementation at compile time. An example of this is Lambda expressions, introduced in JDK 8. These represent the implementation of the single abstract method of a functional interface. Rather than restricting the compilation strategy to the simple use of an equivalent anonymous inner class, the compiler uses the invokedynamic bytecode, added to the JVM in JDK 7. At runtime, the JVM will generate a dynamic class that implements the functional interface and delivers the concrete implementation of the abstract method.&lt;/p&gt;</description></item></channel></rss>