Core Java
-

BEAM Supervision Trees and “Let It Crash”: What Java Services Can Steal from Erlang
Most Java code tries hard to never fail. Erlang takes the opposite view, and the idea travels better than you…
Read More » -

Strings and Unicode: UTF-16, Compact Strings, and Why Emoji Break charAt
Java says a string has two characters, while your user sees exactly one. Both answers are correct, and that is…
Read More » -

JFR Event Streaming: Continuous Production Profiling Without a Vendor Agent
Your JVM already ships with a profiler that is safe for production. Since JDK 14, it can also talk to…
Read More » -

Mutation testing with PIT: why 100% coverage proves almost nothing
PIT (also called Pitest) is the usual mutation testing tool for the JVM. It generates mutants for you, using a…
Read More » -

LongAdder vs AtomicLong: Why a Single Counter Collapses Under Contention
A counter is the “hello world” of concurrent programming. Count requests, count cache hits, count bytes sent. One shared number,…
Read More » -

Flexible Constructor Bodies: Validating Before super()
Here’s a small confession. For years I wrote constructors that did their validation in the wrong place, and I knew…
Read More » -

Structured Concurrency: Why JEP 505 Changes How We Think About Cancellation, Not Just Syntax
A request comes in. Your service forks two calls, one for the user and one for their orders. The user…
Read More » -

Gson Deserialization and the InaccessibleObjectException
Gson is a popular Java library for converting JSON into Java objects and Java objects into JSON. While Gson works…
Read More »

