Skip to content

Blog

Production error deep-dives — root cause, reproduction, and the fix that holds.

How to Use Sealed Classes and Interfaces in Java 21

Build a currency-rate feed in Java 21 where the compiler flags every switch you forgot to update. Sealed interfaces, records and sealed classes, step by step.

How to Use WatchService in Java to Watch a Directory

Build a folder watcher in Java 21 with WatchService. It copes with half-written files, duplicate events and overflow, and ships with 23 passing checks.

RecordTooLargeException: Fixing Kafka's Message Size Limits

RecordTooLargeException fires from two different places for two different reasons. Here's how to tell which one hit you, and the fix that actually holds.

Virtual Thread Pinning: Why synchronized Froze Your App

Virtual threads pinned by synchronized collapse throughput to your CPU count and can hang outright. Diagnose pinning on JDK 21 and fix it on 24+.

Java InvalidClassException: local class incompatible

InvalidClassException: local class incompatible means the stream's serialVersionUID no longer matches your class. Here is why it drifted, and how to fix it without losing data.

Strange Java Stack Frames: lambda$0, $1, init and Proxies

A lambda$main$0 stack trace, access$000, <init>, $Proxy0: what odd frame names in a Java stack trace mean, where javac puts them, and how to read past them.

Async Stack Traces in Java: CompletableFuture and Executors

A CompletableFuture stack trace points at a pool worker and says nothing about who submitted the task. How to read async Java traces and get that context back.

Too Many Open Files in Java: File Descriptor Leaks Fixed

java.io.IOException: Too many open files means you hit the descriptor limit. How to count FDs, find the leak with /proc and lsof, and set limits that hold.

OutOfMemoryError: Direct buffer memory: Causes and Fixes

OutOfMemoryError: Direct buffer memory means off-heap buffers hit their cap while the heap looks idle. Why GC frees them too late, and the fixes that work.

Finding Java Memory Leaks with Heap Dumps, Step by Step

Heap keeps climbing after every full GC? How to confirm a Java memory leak, take the right heap dumps, compare them, and walk from the leak back to the code.