<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>JDK 23 on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/jdk-23/</link><description>Recent content in JDK 23 on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 23 Mar 2026 10:48:35 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/jdk-23/index.xml" rel="self" type="application/rss+xml"/><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>Project Loom: Structured Concurrency - Java</title><link>https://foojayio.github.io/website/today/project-loom-structured-concurrency-java/</link><pubDate>Wed, 29 Jan 2025 12:12:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/project-loom-structured-concurrency-java/</guid><description>&lt;p&gt;In today&amp;rsquo;s era of cloud computing, where high-performance infrastructure is readily available, developers face a complex challenge in achieving efficient concurrency.&lt;/p&gt;
&lt;p&gt;While modern technological advancements have brought us closer to solving these challenges, we must adopt a thoughtful, incremental approach to concurrency.&lt;/p&gt;
&lt;p&gt;This principle holds especially true as we strive to design scalable, reliable, and easy-to-maintain systems.&lt;/p&gt;
&lt;p&gt;One such advancement in this domain is &lt;em&gt;structured concurrency&lt;/em&gt;, a paradigm that simplifies concurrent programming by bringing order and predictability to task management.&lt;/p&gt;</description></item><item><title>Just-Write-And-Run prototyping with JEP-477</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-just-write-and-run-prototyping-with-jep-477-not-only-for-beginners/</link><pubDate>Wed, 23 Oct 2024 09:37:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-just-write-and-run-prototyping-with-jep-477-not-only-for-beginners/</guid><description>&lt;h3 id="h3-0-it-seems-like-it-s-never-been-easier-to-start-writing-a-simple-program-that-can-be-turned-into-a-more-advanced-one-as-development-progresses-let-s-explore-possibilities-delivered-by-jdk-23-release"&gt;It seems like it&amp;rsquo;s never been easier to start writing a simple program that can be turned into a more advanced one as development progresses. Let&amp;rsquo;s explore possibilities delivered by JDK 23 release.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;From the early days, Java may have struggled with a relatively verbose and sometimes strikingly complicated process of creating a small program. A small program just to validate an idea or assumption. Let&amp;rsquo;s call that Just-Write-And-Run feature. For example, it&amp;rsquo;s required to create a trivial solution for reading and parsing data, Oh now what&amp;hellip;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Gatherers upgrades pipeline design pattern JEP-461</title><link>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-gatherers-upgrades-pipeline-design-pattern-jep-461/</link><pubDate>Tue, 15 Oct 2024 06:18:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/exploring-new-features-in-jdk-23-gatherers-upgrades-pipeline-design-pattern-jep-461/</guid><description>&lt;p&gt;Source-code flexibility goes hand in hand with maintainability and testability. The Java language benefits not only from its maturity but also from the fact that it is strongly typed. This may initiate possible discussion topics, as each defined variable requires its type to be known, which can lead to unnecessary verbosity in the source code (reduced by JEP-286: local variable type inference[4]).&lt;/p&gt;
&lt;p&gt;Since the introduction of the Stream API in Java 8, developers have benefited from the ability to create complex transformations inside pipelines. The Stream API allows a lazily evaluated definition of how a pipeline (Example 1.- 1) should be transformed through one or multiple intermediate functions (Example 1.- 2). The sequence of intermediate functions must be terminated by a terminal function that materializes the output (Example 1.- 3).&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>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>Foojay Podcast #57: Welcome to OpenJDK 23</title><link>https://foojayio.github.io/website/today/foojay-podcast-57/</link><pubDate>Mon, 16 Sep 2024 11:34:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-57/</guid><description>&lt;p&gt;OpenJDK (Java) 23 is (almost) here!&lt;/p&gt;
&lt;p&gt;OpenJDK 23 introduces three new features to the language and runtime and many bug fixes, small improvements, and a longer list of preview features.&lt;/p&gt;
&lt;p&gt;What are the most important facts about this release? 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/7PGOhbiPoRY?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>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>Java's Unsafe is Finally Going Away</title><link>https://foojayio.github.io/website/today/unsafe-is-finally-going-away-embracing-safer-memory-access-with-jep-471/</link><pubDate>Thu, 11 Jul 2024 07:52:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/unsafe-is-finally-going-away-embracing-safer-memory-access-with-jep-471/</guid><description>&lt;p&gt;Java, being a safe language, doesn&amp;rsquo;t usually allow direct low-level access. Memory is primarily managed on the heap, so developers don&amp;rsquo;t typically deal with memory directly. However, library developers are occasionally required to manipulate memory outside the heap for performance or specific use cases. This is where the controversial &lt;a href="https://github.com/openjdk/jdk/blob/master/src/jdk.unsupported/share/classes/sun/misc/Unsafe.java" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;sun.misc.Unsafe&lt;/strong&gt;&lt;/a&gt;
 comes in.&lt;/p&gt;
&lt;p&gt;While undeniably powerful, &lt;strong&gt;sun.misc.Unsafe&lt;/strong&gt; is a double-edged sword. Its improper use can lead to severe consequences, including memory leaks, crashes due to invalid memory access, and even security vulnerabilities like buffer overflows. As the name suggests, it&amp;rsquo;s inherently unsafe.&lt;/p&gt;</description></item></channel></rss>