Latest Articles

Java 17 is here: 14 JEPs with exciting new language and JVM features

Java 17

The JEPs delivered in Java 17 range from new language features to improvements for core libraries to previews and incubators.

Modern file input/output with the Java Path API and Files helper methods

Coding

They’ve been around since Java 7, but not everyone knows how to use the NIO.2 file I/O facilities.

Java is criminally underhyped

Coding

Recent computer science graduate Jackson Roberts never took a single class in Java. That’s just wrong, he says.

The art of long-term support and what LTS means for the Java ecosystem

Java 17

Here’s what Java 17 has in common with Java 11 and Java 8.

It’s time to move your applications to Java 17. Here’s why. And here’s how.

Java 17

What you need to know about code migration from the previous Long-Term-Support versions of the platform: Java 11 and Java 8

The best HotSpot JVM options and switches for Java 11 through Java 17

JVM Internals

The JDK defaults for HotSpot are great, but sometimes you want to tinker.

IBM’s OS/2 Warp 4.0 focused on Java: A 25-year-old perspective

Java 25th Anniversary

A quarter century ago, Java’s platform independence offered a way to compete against Microsoft’s Windows platform.

Add behavior-driven development to your Java Agile development toolbox

Agile

Behavior-driven development is the next natural step from test-driven development.

What are they building—and why? 6 questions for the top Java architects

Java 17

How Java projects such as Loom, Panama, and Valhalla are laying the foundation for the future of the platform

Microservice, monolith, microlith

Microservices

A proposal to overcome the limitations of both monolith and microservices applications

Monitoring Oracle WebLogic Server for Oracle Container Engine for Kubernetes with Grafana and Prometheus

Java EE

How to use open source tools to keep tabs on enterprise applications

Introducing the JavaCC 21 parser generator for Java

Tools

This open source tool generates the code for embedding parsers into Java applications.

The hidden gems in Java 16 and Java 17, from Stream.mapMulti() to HexFormat

Java 17

There’s much more to a new Java release than the well-known JEPs.

Look out, Duke! Part 2: Control a Java game with a Raspberry Pi and a joystick

Coding

It takes only a little hardware, and only a little software, to attach a single-board computer to a Java game.

How to solve the classic Traveling Salesman Problem in Java

Coding

How collaboration, mentorship, and (surprise!) deleting code can increase efficiency

Ripe for the picking: 11 essential Java features to help modernize your code

Coding

Use these Java language improvements to make your code easier to write, read, and maintain.

Introduction to chaos engineering, Part 2: Four steps for disrupting complex systems

Testing

Here’s how to break your most critical business systems—intentionally.

Dalia’s gentle introduction to Docker

Containers

The friendly overview of containers and Docker that many Java developers have been looking for

4 ready-to-try Java tools your team may not know about

Tools

Tell everyone about jdeprscan, jlink, jpackage, and Java Flight Recorder.

Look out, Duke! Part 1: How to build a Java game with JavaFX and the FXGL library

Coding

You’ll be amazed at how little code is needed to create a 2D arcade game.

Introduction to chaos engineering, Part 1: Crash test your application

Testing

One way to test a complex software system is to carefully break things and see what happens.

A new reporting platform for managing installed Java versions and applications

Tools

Java Management Service provides analytics on Java running in the cloud and on-premises.

Web microservices development in Java that will Spark joy

Frameworks

The Spark framework might be the platform you need for building web applications that run in the JVM.

Happy anniversary! Celebrating 10 years of Java Magazine

From the Editor

From Java 7 to Java 16 and beyond, this technical journal has been a resource by and for the Java community.

Java for the cloud, and the cloud for Java

Frameworks

Running Java in the cloud helps lower costs, speed up operations, and simplify the deployment.

10 good reads from the Java Magazine archives

Coding

For years, some important articles have not been available on the magazine website. They are now.

Functional programming in Java, Part 2: Lambda reuse, lexical scoping and closures, and reduce()

Coding

Learn how to use lambda expressions to greatly reduce code clutter.

Exploring Joshua Bloch’s Builder design pattern in Java

Design Patterns

Bloch’s Builder pattern can be thought of as a workaround for a missing language feature.

You don’t always need an application server to run Jakarta EE applications

Jakarta EE

Depending on the requirements, you can do well with Helidon, Piranha, or Hammock.

Functional programming in Java, Part 1: Lists, lambdas, and method references

Coding

Learn how to use lambda expressions to greatly reduce code clutter.

Pedal to the metal: High-performance Java with GraalVM Native Image

GraalVM

How Native Image’s G1 GC garbage collector and profile-guided optimizations can help build fast, efficient, easy-to-distribute binaries for Java applications

Make Java REST development easier with the Jareto library

REST

A small open source library helps with mapping Java exceptions and transporting HTTP metadata.

Everything you need to know about OpenJDK’s move to Git and GitHub

Java 17

The move from Mercurial to Git provided an opportunity to consolidate the source code repositories.

Understanding Java generics, Part 2: The hard part

Coding

Learn about wildcards, bounded wildcards, subtyping, and type erasure.

A peek into Java 17: Continuing the drive to encapsulate the Java runtime internals

JVM Internals

The need to encapsulate the runtime is fundamentally caused by Java’s nature as an open programming environment.

Understanding Java generics, Part 1: Principles and fundamentals

Coding

Learn how to use generics to increase type safety and code readability.

Guava: A treasure trove of Java functionality

Tools

This broad collection of utilities and functions from Google merits a principal place in your toolkit.

Even more greatness packed into Java 16, including tools for improving future JVMs

Java 16

Java Champions love pattern matching for instanceof, records, Stream.toList(), the vector API, the foreign linker API, and the foreign-memory access API.

First steps with Oracle Cloud Infrastructure SDK for Java

Coding

Learn how to control Oracle Cloud Infrastructure resources through Java code.

Two gifts you can give your Java developers—today

Coding

Your words, actions, and attitude can inspire creativity. Here’s what to do.

Java still rocks the finance industry. Here’s why Java 16 makes it even better.

Java 16

High-speed trades? Quantitative analysis? The investment pays off.

Java for the enterprise: What to expect in Jakarta EE 10

Jakarta EE

The release is only a year away. Here’s what to expect.

Essential Java 16 resources and downloads

Java 16

Information from the Oracle Java Platform Group and from Java Magazine

From the vector API to records to elastic metaspace, there’s a lot packed into Java 16

Java 16

The Java Champions say these are a few of their favorite things.

Enabling Java for Windows on Arm64

Java 16

Porting Java to the AArch64 architecture is a JEP 388 success story.

How to program machine learning in Java with the Tribuo library

Java 16

Tribuo is an open source ML library designed for business applications—and for interoperability with many popular ML platforms.

Working and unit testing with temporary files in Java

Testing

Temporary files are frequently used in testing and in production. Here is how to create and manage—and delete—them.

Mastering the mechanics of Java method invocation

JVM Internals

Special bytecodes make calling methods particularly efficient. Knowing how they operate reveals how the JVM executes your code.

The best of 2020: The 10 most popular Java Magazine articles

Read them, reread them, share them.

Fast, flexible data access in Java using the Helidon microservices platform

Microservices

Helidon SE and Helidon MP provide a very diverse array of methods for accessing data sources.

Design change-tolerant software with cloud native patterns

Testing

By applying cloud native designs, you can build resilient, easily adaptable, web-scale distributed applications that handle massive user traffic and data loads.

How to build applications with the WebSocket API for Java EE and Jakarta EE

Jakarta EE

WebSocket is a two-way communication protocol that lets clients send and receive messages over a single connection to a server endpoint.

Going inside Java’s Project Loom and virtual threads

Coding

See how virtual threads bring back the old days of Java’s green threads—that is, Java threads not tied to operating-system threads.

Hello, Coherence Community Edition, Part 3: Packaging, deployment, scaling, persistence, and operations with Java

Tools

How to push a Coherence CE application out to a Kubernetes cluster, and then scale and manage that cluster

Java on Arm processors: Understanding AArch64 vs. x86

Java SE

Arm-based processors are increasingly popular and are in the news thanks to Apple’s latest notebooks and Oracle’s cloud services.

Refactoring Java, Part 2: Stabilizing your legacy code and technical debt

Testing

Pin-down tests are the key to stabilizing your legacy Java code.