<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://inside.java/feed.xml" rel="self" type="application/atom+xml" /><link href="https://inside.java/" rel="alternate" type="text/html" /><updated>2026-06-02T10:45:16+00:00</updated><id>https://inside.java/feed.xml</id><title type="html">insidejava</title><subtitle>News and views from members of the Java team at Oracle</subtitle><entry><title type="html">Intelligent JVM Monitoring: Combining JDK Flight Recorder with AI</title><link href="https://inside.java/2026/06/02/jfr-ai-monitor/" rel="alternate" type="text/html" title="Intelligent JVM Monitoring: Combining JDK Flight Recorder with AI" /><published>2026-06-02T00:00:00+00:00</published><updated>2026-06-02T00:00:00+00:00</updated><id>https://inside.java/2026/06/02/jfr-ai-monitor</id><content type="html" xml:base="https://inside.java/2026/06/02/jfr-ai-monitor/"><![CDATA[<div class="youtube-embed">
    <iframe src="https://www.youtube.com/embed/L5d966dUfhM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>
</div>

<p>How do you monitor your JVM applications effectively? A powerful option is JDK Flight Recorder (JFR). JFR simplifies troubleshooting and profiling by capturing detailed JVM events, and its streaming API lets you access them in real-time. But what if we could stream live JFR data directly into an AI system to enhance monitoring or even prevent potential issues before they occur?</p>

<p>This session shows how to use JFR to build self-improving applications with AI and new JDK features. Using a real-life simulated example, you’ll learn to stream JFR data, integrate JVM events with AI, spot performance bottlenecks and unusual behavior automatically, and build better debugging and monitoring tools.</p>

<p>By the end, you’ll have a roadmap for combining JFR and AI to enhance troubleshooting and observability.</p>

<p><em>Make sure to check the <a href="https://www.youtube.com/playlist?list=PLX8CzqL3ArzUMVSzm-z_-if8BIB55EGl4">JavaOne 2026 playlist</a>.</em></p>]]></content><author><name>[&quot;YagmurEren&quot;]</name></author><category term="AI" /><category term="JFR" /><category term="Serviceability" /><summary type="html"><![CDATA[JFR simplifies troubleshooting and profiling by capturing detailed JVM event data—and with the JFR Streaming API, you can access those insights in real time. But what if you could go further and stream live JFR data straight into an AI system to enhance monitoring, accelerate troubleshooting, and even help prevent issues before they occur? This session shows how to use JFR to build self-improving applications with AI and new JDK features.]]></summary></entry><entry><title type="html">Episode 59 “Java *is* Memory Efficient” [AtA]</title><link href="https://inside.java/2026/05/28/podcast-059/" rel="alternate" type="text/html" title="Episode 59 “Java *is* Memory Efficient” [AtA]" /><published>2026-05-28T00:00:00+00:00</published><updated>2026-05-28T00:00:00+00:00</updated><id>https://inside.java/2026/05/28/Podcast-059</id><content type="html" xml:base="https://inside.java/2026/05/28/podcast-059/"><![CDATA[<p><img class="webfeedsFeaturedVisual" style="display: none;" src="/images/thumbnail/ChadMic.jpg?820349350" /></p>

<p><br /></p>

<iframe title="Libsyn Player" style="border: none" src="//html5-player.libsyn.com/embed/episode/id/41449370/height/90/theme/custom/thumbnail/yes/direction/forward/render-playlist/no/custom-color/000000/" height="90" width="100%" scrolling="no"></iframe>

<div class="youtube-embed">
	<iframe src="https://www.youtube.com/embed/M_HCG1JPMQE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><br /></p>

<p>Java’s use of memory, often chided for being excessive, is actually a strength as it trades more memory use for fewer CPU cycles. Java can only make this tradeoff due to its moving garbage collectors, something more memory efficient platforms often cannot. But what’s the point in leaving available memory on the table if using it makes your program run faster? Efficient use of that resource wouldn’t be to leave it untapped but to use it to speed up the program.</p>

<p>In this “Ask the Architect” episode of the Inside Java Podcast, recorded during JavaOne 2026, Nicolai Parlog talks to Ron Pressler, Java Architect at Oracle.</p>

<p><br /></p>

<p>Make sure to also check the <strong>Duke’s Corner podcast</strong> on <a href="https://dev.java/duke/corner/">dev.java</a>.</p>

<p><br /></p>

<h3 id="additional-resources">Additional resources</h3>

<ul>
  <li><a href="https://inside.java">Inside.java</a> : News and views from members of the Java team at Oracle</li>
  <li><a href="https://dev.java">Dev.java</a> : The Destination for Java Developers</li>
  <li><a href="https://openjdk.java.net/">OpenJDK</a></li>
  <li><a href="https://www.oracle.com/java/">Oracle Java</a></li>
</ul>

<p>For more episodes, check out <a href="https://inside.java/podcast">Inside Java</a>, our <a href="https://www.youtube.com/playlist?list=PLX8CzqL3ArzV_hXbRevwzrXSMcGNzhxiZ">YouTube playlist</a>, and follow <a href="https://x.com/java">@Java</a> on X.</p>

<p>Contact us <a href="https://inside.java/about/">here</a>.</p>]]></content><author><name>[&quot;NicolaiParlog&quot;]</name></author><category term="GC" /><category term="Performance" /><summary type="html"><![CDATA[Java's use of memory, often chided for being excessive, is actually a strength as it trades more memory use for fewer CPU cycles, a tradeoff it can only make due to its moving garbage collectors.]]></summary></entry><entry><title type="html">JEP targeted to JDK 27: 523: Make G1 the Default Garbage Collector in All Environments</title><link href="https://inside.java/2026/05/26/jep523-target-jdk27/" rel="alternate" type="text/html" title="JEP targeted to JDK 27: 523: Make G1 the Default Garbage Collector in All Environments" /><published>2026-05-26T00:00:00+00:00</published><updated>2026-05-26T00:00:00+00:00</updated><id>https://inside.java/2026/05/26/JEP523-target-JDK27</id><content type="html" xml:base="https://inside.java/2026/05/26/jep523-target-jdk27/"><![CDATA[<p>The following JEP is targeted to JDK 27: 523: Make G1 the Default Garbage Collector in All Environments</p>

<p><img class="webfeedsFeaturedVisual" style="display: none;" src="/images/thumbnail/jep.jpg?814267619" /></p>]]></content><author><name>[&quot;ThomasSchatzl&quot;]</name></author><category term="JDK 27" /><category term="GC" /><summary type="html"><![CDATA[The following JEP is targeted to JDK 27: 523: Make G1 the Default Garbage Collector in All Environments]]></summary></entry><entry><title type="html">Agentic AI Workflows for OpenJDK Development</title><link href="https://inside.java/2026/05/26/openjdk-ai-agents/" rel="alternate" type="text/html" title="Agentic AI Workflows for OpenJDK Development" /><published>2026-05-26T00:00:00+00:00</published><updated>2026-05-26T00:00:00+00:00</updated><id>https://inside.java/2026/05/26/openjdk-ai-agents</id><content type="html" xml:base="https://inside.java/2026/05/26/openjdk-ai-agents/"><![CDATA[<p><img class="webfeedsFeaturedVisual" style="display: none;" src="/images/thumbnail/code.jpg" /></p>]]></content><author><name>[&quot;JoelSikstrom&quot;]</name></author><category term="AI" /><summary type="html"><![CDATA[Details and reflections on how I’ve been using AI to approach OpenJDK development.]]></summary></entry><entry><title type="html">JEP targeted to JDK 27: 537: Vector API (12th Incubator)</title><link href="https://inside.java/2026/05/25/jep537-target-jdk27/" rel="alternate" type="text/html" title="JEP targeted to JDK 27: 537: Vector API (12th Incubator)" /><published>2026-05-25T00:00:00+00:00</published><updated>2026-05-25T00:00:00+00:00</updated><id>https://inside.java/2026/05/25/JEP537-target-JDK27</id><content type="html" xml:base="https://inside.java/2026/05/25/jep537-target-jdk27/"><![CDATA[<p>The following JEP is targeted to JDK 27: 537: Vector API (Twelfth Incubator)</p>

<p><img class="webfeedsFeaturedVisual" style="display: none;" src="/images/thumbnail/jep.jpg?810896947" /></p>]]></content><author><name>[&quot;XuemingShen&quot;]</name></author><category term="JDK 27" /><category term="Panama" /><summary type="html"><![CDATA[The following JEP is targeted to JDK 27: 537: Vector API (Twelfth Incubator)]]></summary></entry><entry><title type="html">Tutorial: Accessibility in JavaFX</title><link href="https://inside.java/2026/05/24/javafx-accesibility-tutorials/" rel="alternate" type="text/html" title="Tutorial: Accessibility in JavaFX" /><published>2026-05-24T00:00:00+00:00</published><updated>2026-05-24T00:00:00+00:00</updated><id>https://inside.java/2026/05/24/javafx-accesibility-tutorials</id><content type="html" xml:base="https://inside.java/2026/05/24/javafx-accesibility-tutorials/"><![CDATA[<p><img class="webfeedsFeaturedVisual" style="display: none;" src="/images/thumbnail/code.jpg" /></p>]]></content><author><name>[&quot;Ana-MariaMihalceanu&quot;]</name></author><category term="Client" /><summary type="html"><![CDATA[These tutorials describe how to build accessible JavaFX applications.]]></summary></entry><entry><title type="html">Java AOT in Production at Netflix</title><link href="https://inside.java/2026/05/23/java-aot-in-production-at-netflix/" rel="alternate" type="text/html" title="Java AOT in Production at Netflix" /><published>2026-05-23T00:00:00+00:00</published><updated>2026-05-23T00:00:00+00:00</updated><id>https://inside.java/2026/05/23/Java-AOT-in-Production-at-Netflix</id><content type="html" xml:base="https://inside.java/2026/05/23/java-aot-in-production-at-netflix/"><![CDATA[<div class="youtube-embed">
    <iframe src="https://www.youtube.com/embed/4kEh8hxAP4U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>
</div>

<p><em>“Draw the Rest of the Owl: Leyden in Production and the Infrastructure Needed to Get It There.”</em></p>

<p><em>Learn how Netflix used Project Leyden to improve startup time of critical services and the software and SDLC they built to make that happen.</em></p>

<p><em>Presented by Martin Chalupa (Netflix) and Ian Brown (Netflix) at JavaOne 2026 (CA, March 2026).</em></p>

<p><em>Make sure to check the <a href="https://www.youtube.com/playlist?list=PLX8CzqL3ArzUMVSzm-z_-if8BIB55EGl4">JavaOne 2026 playlist</a>.</em></p>]]></content><author><name></name></author><category term="Leyden" /><category term="Performance" /><summary type="html"><![CDATA["Draw the Rest of the Owl: Leyden in Production and the Infrastructure Needed to Get It There." Learn how Netflix used Project Leyden to improve startup time of critical services and the software and SDLC they built to make that happen.]]></summary></entry><entry><title type="html">Newsletter: JDK 27 Approaches Rampdown | Final Field Mutation Warnings Heads-up</title><link href="https://inside.java/2026/05/22/quality-heads-up/" rel="alternate" type="text/html" title="Newsletter: JDK 27 Approaches Rampdown | Final Field Mutation Warnings Heads-up" /><published>2026-05-22T00:00:00+00:00</published><updated>2026-05-22T00:00:00+00:00</updated><id>https://inside.java/2026/05/22/Quality-Heads-Up</id><content type="html" xml:base="https://inside.java/2026/05/22/quality-heads-up/"><![CDATA[<p>This Heads-Up is part of the regular communication sent to the projects involved; it announces that JDK 27 approaches rampdown and final field mutation warnings heads-up.</p>

<p><img class="webfeedsFeaturedVisual" style="display: none;" src="/images/thumbnail/code.jpg?799554506" /></p>]]></content><author><name>[&quot;DavidDelabassee&quot;]</name></author><category term="JDK 27" /><summary type="html"><![CDATA[This Heads-Up is part of the regular communication sent to the projects involved; it announces that JDK 27 approaches rampdown and final field mutation warnings heads-up.]]></summary></entry><entry><title type="html">On Default Values for Primitive-Like Classes</title><link href="https://inside.java/2026/05/21/values-primitive-classes/" rel="alternate" type="text/html" title="On Default Values for Primitive-Like Classes" /><published>2026-05-21T00:00:00+00:00</published><updated>2026-05-21T00:00:00+00:00</updated><id>https://inside.java/2026/05/21/values-primitive-classes</id><content type="html" xml:base="https://inside.java/2026/05/21/values-primitive-classes/"><![CDATA[<p><img class="webfeedsFeaturedVisual" style="display: none;" src="/images/thumbnail/DukeReadingDocuments.png" /></p>]]></content><author><name>[&quot;JohnRose&quot;]</name></author><category term="Valhalla" /><summary type="html"><![CDATA[Primitive defaults are chosen so that they are (probably) represented by memory set to one or more bytes with all bits set to zero; we call these all-zero-bits values. We want “primitive-like” classes to have similar optimization opportunities, even if some classes will choose to nominate defaults values that are not all-zero-bits values. This document discusses possible semantics for such default values, as well as examines their possible quality of implementation, as supported by the JVM and runtime. It will look at cross-cutting interactions with class definition, classfile format, class initialization, bytecode verification, instance construction, and array creation (with some notes on frozen arrays).]]></summary></entry><entry><title type="html">Quality Outreach Heads-up - JDK 27: Numeric Fields in JSON Thread Dumps</title><link href="https://inside.java/2026/05/20/quality-heads-up/" rel="alternate" type="text/html" title="Quality Outreach Heads-up - JDK 27: Numeric Fields in JSON Thread Dumps" /><published>2026-05-20T00:00:00+00:00</published><updated>2026-05-20T00:00:00+00:00</updated><id>https://inside.java/2026/05/20/Quality-Heads-Up</id><content type="html" xml:base="https://inside.java/2026/05/20/quality-heads-up/"><![CDATA[<p><img class="webfeedsFeaturedVisual" style="display: none;" src="/images/thumbnail/code.jpg" /></p>

<p><em>The <a href="https://wiki.openjdk.java.net/display/quality/Quality+Outreach">OpenJDK Quality Group</a> is promoting the testing of FOSS projects with OpenJDK builds as a way to improve the overall quality of the release. This heads-up is part of a <a href="https://mail.openjdk.org/archives/list/quality-discuss@openjdk.org/thread/REAJQSW4DJ6BZNEKLGU56HB2757I26HM/">Quality Outreach</a> update sent to the projects involved. To learn more about the program and how to join, please check the <a href="https://wiki.openjdk.java.net/display/quality/Quality+Outreach">Quality Outreach wiki page</a>.</em></p>

<h2 id="numeric-values-usage-in-json-thread-dumps">Numeric Values Usage in JSON Thread Dumps</h2>

<p>JSON thread dumps generated by <code class="language-plaintext highlighter-rouge">com.sun.management.HotSpotDiagnosticMXBean.dumpThreads</code> and the<code class="language-plaintext highlighter-rouge"> jcmd Thread.dump_to_file</code> command now write thread identifiers, thread counts, and the process identifier as JSON numbers instead of strings.</p>

<p>For example, when using a command like <code class="language-plaintext highlighter-rouge">jcmd &lt;PID&gt; Thread.dump_to_file -format=json threads.json</code> to write thread stack traces to a file in JSON format, the output would look like in the snippet below.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"threadDump"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"formatVersion"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
    </span><span class="nl">"processId"</span><span class="p">:</span><span class="w"> </span><span class="mi">36340</span><span class="p">,</span><span class="w">
    </span><span class="nl">"time"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2026-05-15T12:43:21.601545Z"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"runtimeVersion"</span><span class="p">:</span><span class="w"> </span><span class="s2">"27-ea+22-2010"</span><span class="p">,</span><span class="w">
    </span><span class="nl">"threadContainers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"container"</span><span class="p">:</span><span class="w"> </span><span class="s2">"&lt;root&gt;"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"parent"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
        </span><span class="nl">"owner"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
        </span><span class="nl">"threads"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
          </span><span class="p">{</span><span class="w">
            </span><span class="nl">"tid"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
            </span><span class="nl">"time"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2026-05-15T12:43:21.604046Z"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"main"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TIMED_WAITING"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"stack"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
              </span><span class="s2">"java.base</span><span class="se">\/</span><span class="s2">java.lang.Thread.sleepNanos0(Native Method)"</span><span class="p">,</span><span class="w">
              </span><span class="s2">"java.base</span><span class="se">\/</span><span class="s2">java.lang.Thread.sleepNanos(Thread.java:562)"</span><span class="p">,</span><span class="w">
              </span><span class="s2">"java.base</span><span class="se">\/</span><span class="s2">java.lang.Thread.sleep(Thread.java:593)"</span><span class="p">,</span><span class="w">
              </span><span class="s2">"HelloThreads.main(HelloThreads.java:4)"</span><span class="p">,</span><span class="w">
              </span><span class="s2">"java.base</span><span class="se">\/</span><span class="s2">jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)"</span><span class="p">,</span><span class="w">
              </span><span class="s2">"java.base</span><span class="se">\/</span><span class="s2">java.lang.reflect.Method.invoke(Method.java:583)"</span><span class="p">,</span><span class="w">
              </span><span class="s2">"jdk.compiler</span><span class="se">\/</span><span class="s2">com.sun.tools.javac.launcher.SourceLauncher.execute(SourceLauncher.java:260)"</span><span class="p">,</span><span class="w">
              </span><span class="s2">"jdk.compiler</span><span class="se">\/</span><span class="s2">com.sun.tools.javac.launcher.SourceLauncher.run(SourceLauncher.java:138)"</span><span class="p">,</span><span class="w">
              </span><span class="s2">"jdk.compiler</span><span class="se">\/</span><span class="s2">com.sun.tools.javac.launcher.SourceLauncher.main(SourceLauncher.java:76)"</span><span class="w">
            </span><span class="p">]</span><span class="w">
          </span><span class="p">}</span><span class="w">
        </span><span class="p">],</span><span class="w">
        </span><span class="nl">"threadCount"</span><span class="p">:</span><span class="w"> </span><span class="mi">7</span><span class="w">
      </span><span class="p">}</span><span class="w">
      </span><span class="err">....</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>This change of format also introduces versioning through <code class="language-plaintext highlighter-rouge">"formatVersion": 2</code> member, while metadata fields such as <code class="language-plaintext highlighter-rouge">processId</code>, <code class="language-plaintext highlighter-rouge">tid</code>, and <code class="language-plaintext highlighter-rouge">threadCount</code> are serialized as JSON numeric values rather than JSON string types.</p>

<h2 id="call-to-action">Call to Action</h2>

<p>We encourage you to download the <a href="https://jdk.java.net/27/">JDK 27 early-access builds</a> and test any tools, scripts, tests, or applications that parse JSON thread dumps.
If needed, update them to handle numeric values for thread identifiers, thread counts, and the process identifier, and use the new formatVersion field to detect and handle future thread dump format changes.</p>

<center>~</center>]]></content><author><name>[&quot;Ana-MariaMihalceanu&quot;]</name></author><category term="JDK 27" /><category term="Serviceability" /><summary type="html"><![CDATA[This Heads-Up is part of the regular communication sent to the projects involved; it covers thatJSON thread dumps now emit thread identifiers, thread counts, and the process identifier as numeric types.]]></summary></entry></feed>