Jekyll2026-03-26T11:18:09+00:00https://inside.java/feed.xmlinsidejavaNews and views from members of the Java team at OracleEpisode 52 “Carrier Classes & Discussing Syntax” [AtA]2026-03-26T00:00:00+00:002026-03-26T00:00:00+00:00https://inside.java/2026/03/26/Podcast-052



Carrier classes are Project Amber’s current idea to extend some of records’ benefits to regular classes. Probably the most important among them is deconstruction, which would allow classes to participate in pattern matching and reconstruction. In recent weeks, there have been two mails to the Amber mailing list that describe that idea, and in this episode we discuss them both as well as the evolution between them. We also hear why syntax discussions often provide negative value and get a sneak peak at what will likely be the next Project Amber language feature.

Just ahead of the JavaOne speakers dinner, Nicolai Parlog sits down with Brian Goetz, Java Language Architect in Oracle’s Java Platform Group, for this “Ask the Architect” episode of the Inside Java Podcast.

Links:


Make sure to also check the Duke’s Corner podcast on dev.java.


Additional resources

For more episodes, check out Inside Java, our YouTube playlist, and follow @Java on Twitter.

Contact us here.

]]>
["NicolaiParlog"]
JavaFX 26 Today2026-03-25T00:00:00+00:002026-03-25T00:00:00+00:00https://inside.java/2026/03/25/JavaOne-JavaFX

Building a compelling desktop app today requires features such as UI controls, charts, interactive media, web content, animation, CSS styling, 2D and 3D rendering, rich text, and property binding, with an easy-to-use programming paradigm that runs cross-platform. JavaFX is all this and more, delivering a rich graphical UI toolkit for building your applications and can also seamlessly interoperate with Swing.

In this session you’ll learn about the new and exciting features we’ve developed over the past couple of years, culminating with the release of JavaFX 26. You’ll also get an update on RichTextArea. We’ll show plenty of demos and sample code, and finish with a sneak peek at what’s coming next.

Make sure to check the JavaOne 2026 playlist.

]]>
["KevinRushforth"]
JDK 26 Security Enhancements2026-03-19T00:00:00+00:002026-03-19T00:00:00+00:00https://inside.java/2026/03/19/jdk26-security-enhancements

]]>
["SeanMullan"]
Java 26 in definitely UNDER 3 minutes2026-03-18T00:00:00+00:002026-03-18T00:00:00+00:00https://inside.java/2026/03/18/jdk-26-in-2-mins

_Let’s quickly review in definitely under 3 minutes the 10 JEPs (JDK Enhancement Proposals) that were included in the JDK 26 release! Couldn’t make it to JavaOne? Catch the biggest moments by joining us on our livestreams for the opening Keynote and Community Keynotes right here on the Java YouTube Channel! _

Make sure to check the show-notes.

]]>
["BillyKorando"]
Announcing the Oracle Java Verified Portfolio including Helidon and reintroduction of JavaFX Commercial Support2026-03-17T00:00:00+00:002026-03-17T00:00:00+00:00https://inside.java/2026/03/17/announce-jvpJavaFX commercial support will be made available as part of the new Oracle Java Verified Portfolio (JVP). JVP launches with the JavaFX reintroduction and support for Oracle Java Platform Extension for Visual Studio Code and Helidon. Additional features are planned to be added to the portfolio over the coming months.

]]>
["DonaldSmith"]
The Arrival of Java 262026-03-17T00:00:00+00:002026-03-17T00:00:00+00:00https://inside.java/2026/03/17/the-arrival-of-java-26["SharatChander"]Secure, Scalable JVM Diagnostics for Kubernetes with JMS2026-03-13T00:00:00+00:002026-03-13T00:00:00+00:00https://inside.java/2026/03/13/JMS-Secure-Scalable-JVMObservability Gap for Java in Kubernetes

Cloud native adoption is now mainstream. Kubernetes usage in production has soared to 82% among container[1], and Java applications constitute a substantial share within those clusters. As Kubernetes adoption continues to grow, the need for monitoring, managing and observing Java applications in containers have become more crucial…

In cloud-native architectures, services are typically decomposed into many microservices running across multiple pods. As a result, effective troubleshooting and performance analysis depend on correlating telemetry data (logs, metrics, and traces) across services and performing cross-JVM analysis to diagnose bottlenecks.

While managed Kubernetes platforms provide infrastructure-level metrics such as CPU, memory, logs, and pod health, they do not natively expose JVM-level diagnostic data. JDK Flight Recorder (JFR) is a JVM specific tool that provide these diagnostics such as garbage collection behaviour, allocation profiling, lock contention, safe point analysis, CPU profile shifts, and thread state transitions.

Java Management Service (JMS) in OCI leverages the JFR capabilities to address this gap by providing secure, fleet-scale orchestration of JFR across distributed Kubernetes environments.

Challenges in Getting JVM Diagnostics in Kubernetes

Traditional approach to get JVM diagnostics is by accessing the running JVM directly via JMX or command-line tools like jcmd. However, modern microservices architecture introduces following complexities:

  • Services run across hundreds or thousands of pods.
  • Containers are ephemeral.
  • Direct shell access is restricted.
  • JMX ports are restricted due to security and compliance policies.

These complexities introduce several operational challenges:

  • Orchestration of JFRs across hundreds of distributed JVM instances demands a scalable and centralized management approach capable of operating reliably in dynamic Kubernetes environments.
  • A recording mechanism that is resilient to pod lifecycle events.
  • Large scale storage coordination- for example, capturing 24 hour recording with an average size of 1-2 GB per pod across 100 pods results in approximately 200 GB of diagnostic data.
  • Direct shell access is often restricted, and exposing JMX endpoints for profiling increases the security surface area.
  • Slim JRE builds or jlink-generated runtimes, which may limit the availability of diagnostic utilities within the container.

Secure JFR Orchestration with Java Management Service (JMS)

JMS, an OCI native service, provides monitoring and management for Java workloads. It extends OCI observability by enabling secure, scalable JFR captures across Kubernetes clusters without exposing the JMX endpoints or requiring direct container access. It is implemented as a plugin to the Oracle Management Agent (OMA)[3] and key capabilities includes:

  • Discovery of JVM running inside Kubernetes
  • Identification of runtimes below defined security baselines
  • Fleet-wide JFR recordings across pods
  • JFR recording scheduler
  • Secure export of JFR Recording to an OCI object store
  • Integration to JMS advanced features using JFRs
  • Performance improvement recommendation to fine tune JVM Parameters
    • Detection of deprecated cryptographic algorithms in Oracle JDK

JMS enables centralized capture of JFR recordings from a specific container or across selected application containers within a cluster. Through the JMS console or APIs, administrators can select the target workload, configure recording parameters, and initiate a JFR capture request. Upon completion, the recordings from each container are automatically exported to the designated Object Storage bucket. These recordings can then be analysed to diagnose performance bottlenecks, optimize resource utilization, and gain actionable insights into Java application behaviour.

Architecture Overview Figure 1: Architecture Overview

JMS integrates with the Oracle Management Agent (OMA) service, which is deployed in the Kubernetes cluster using the OCI Kubernetes Monitoring Solution[2]. The JMS plugin runs within the OMA pod and interacts with application pods to collect Java telemetry data and perform JFR operations.

The JMS plugin communicates with the JMS service running in OCI to transmit telemetry data and manage JFR capture requests. Using Kubernetes client APIs, the plugin discovers Java workloads in the cluster, retrieves Java runtime usage details, and executes commands within the application containers to start and stop JFR recordings. The captured telemetry and JFR data are sent securely to JMS service and Object storage respectively. The JMS console displays this data, providing insights into Java runtime versions and application details across the Kubernetes environment.

Common Use Cases and Operational Workflow

A. Out-of-the-Box (OOTB) Capabilities in JMS

A.1. One Click JFR Across Cluster

Administrators can monitor Java application in active containers and trigger or schedule JFRs.

Operational workflow:

  • Onboard the Kubernetes cluster to JMS
  • Discover active Java containers
  • Identify Java runtime versions below security baseline
  • Trigger JFR with single click
  • Export recordings for analysis using tools such as JDK Mission Control

JMS Console displaying active Java containers and JFR controls Figure 2: JMS Console displaying active Java containers and JFR controls

A.2. Incident Response at Fleet Scale

In case of an incident, administrators can trigger JFR across all replicas in a single action during live production troubleshooting.

B. Customer-Implemented Patterns Using JMS + OCI Services

B.1. Automating JFR trigger based on Kubernetes Metrics

JMS can be integrated with OCI Monitoring to trigger JFR based on real time Kubernetes metrics.

Operational workflow:

  • Pre-configure rules based on desired Kubernetes metrics into OCI Monitoring service
  • OMA collects Kubernetes metrics (example CPU/memory)
  • OCI Monitoring evaluates threshold rules
  • OCI Alarm is triggered when thresholds breach
  • OCI Function processes the events
  • JMS APIs triggers JFR on impacted load

(Phase enhancements are planned to reduce trigger latency (~ 10 minutes) for near-immediate recordings)

B.2. Post Deployment Validation

Automatically capture JFR for a fixed duration after each production deployment and detect performance regression early.

Operational workflow:

  • Integrate JFR recordings in production using automation
  • Compare CPU profile shifts, Allocation rate
  • Validate behavioral consistency against baseline

B.3. Post PSU/CPU Patching or Infrastructure Upgrade Analysis

Run JFR for 48–72 hours after and compare allocation rate, thread states, blocking time, CPU profile shifts. This reduces MTTR and prevents regression from surfacing an alert noise.

Conclusion

As Kubernetes adoption accelerates, infrastructure-level observability is no longer enough for Java workloads. Organizations need secure JVM intelligence embedded into their cloud operations model. With JMS, OCI provides a centralized framework for Java runtime governance and fleet-scale JFR orchestration across cloud native environments.

References

Additional Resources

]]>
["PraveenSrivastava"]
Episode 51 “Unboxing Java 26 for Developers” [IJN]2026-03-12T00:00:00+00:002026-03-12T00:00:00+00:00https://inside.java/2026/03/12/Podcast-051



Java 26 is getting all packaged up to be shipped worldwide! As with every release of the JDK there are a number of new features, improvements, changes in behavior, and more developers should be aware of before upgrading. In this episode of the Inside Java Newscast we will review all the noteworthy changes coming in Java 26 that will impact developers.

Links to JDK Enhancement Proposals (JEPs):

Links to JDK Bug Systems (JBS) tickets:


Make sure to also check the Duke’s Corner podcast on dev.java.


Additional resources

For more episodes, check out Inside Java, our YouTube playlist, and follow @Java on Twitter.

Contact us here.

]]>
["BillyKorando"]
The Inside Java Newsletter: New Sponsors for JavaOne! Registration Discount Continues!2026-03-11T00:00:00+00:002026-03-11T00:00:00+00:00https://inside.java/2026/03/11/Inside-Java-Newsletter

]]>
["JimGrisanzio"]
Quality Outreach Heads-up - JDK 27: Removal of ‘java.locale.useOldISOCodes’ System Property2026-03-10T00:00:00+00:002026-03-10T00:00:00+00:00https://inside.java/2026/03/10/Quality-Heads-Up

The OpenJDK Quality Group 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 regular communication sent to the projects involved. To learn more about the program, and how-to join, please check here.

ISO 639 and BCP 47

BCP 47, first introduced in 1995, defines tags to identify languages and its primary subtag (the first of potentially multiple subtags) is usually drawn from the much older ISO 639-1 standard. There are exceptions, though, among them these three languages:

  • Hebrew:
    • ISO 639: iw
    • BCP 47: he
  • Indonesian:
    • ISO 639: in
    • BCP 47: id
  • Yiddish:
    • ISO 639: ji
    • BCP 47: yi

Past Preference

Before JDK 17, Java treated the ISO-639 tags of these three languages as canonical and mapped the BCP 47 tags to them (see Locale’s documentation under Legacy language codes):

static void printLocales(String iso, String bcp) {
	System.out.println(Locale.forLanguageTag(iso) + " | " + Locale.forLanguageTag(bcp));
}

// on JDK < 17, ISO 639 tags are preferred:
public static void main(String[] args) {
	printLocales("iw", "he"); // ~> "iw | iw"
	printLocales("in", "id"); // ~> "in | in"
	printLocales("ji", "yi"); // ~> "ji | ji"
}

Transition

This changed in JDK 17 and since then the default behavior was to map to BCP 47 tags:

// on JDK 17+, BCP 47 tags are preferred:
public static void main(String[] args) {
	printLocales("iw", "he"); // ~> "he | he"
	printLocales("in", "id"); // ~> "id | id"
	printLocales("ji", "yi"); // ~> "yi | yi"
}

To allow applications to update to Java 17 and later without requiring immediate code changes, the temporary system property java.locale.useOldISOCodes was introduced. Setting it to true reverted to the behavior before Java 17.

New Preference

JDK 25 deprecated java.locale.useOldISOCodes and JDK 27 will remove it. Setting it will result in a warning:

WARNING: The system property "java.locale.useOldISOCodes" is no longer supported. Any specified value will be ignored.

Code that relies on java.locale.useOldISOCodes needs to be updated to consistently expect BCP 47 tags when querying Locale instances. It will remain possible to use the ISO 639 tags to instantiate Locale instances for Hebrew, Indonesian, and Yiddish.

~
]]>
["NicolaiParlog"]