Latest Articles

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


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

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


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


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

Dalia’s gentle introduction to Docker


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


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


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


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


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

Web microservices development in Java that will Spark joy


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


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

10 good reads from the Java Magazine archives


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()


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


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

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


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


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


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


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

Guava: A treasure trove of Java functionality


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


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