Skip to content

Gopi Gorantala

Staff engineer architecting Kafka and Flink platforms for banking, where a dropped event is a reconciliation break, not a retry. Through javahandbook.com, I share production-tested guidance on building reliable event-driven systems.

Unknown Source Stack Trace in Java: Fix Missing Line Numbers

Unknown Source in a Java stack trace means the class has no SourceFile or LineNumberTable. How -g flags decide it, how to check with javap, and how to fix it.

Suppressed Exceptions in Java: try-with-resources Explained

A Suppressed: block in a Java stack trace is a second exception thrown while closing a resource. How try-with-resources records it, and how to read it.

Filter Java Stack Traces: Reflection and Proxy Frames

Filter a Java stack trace without hiding the bug: what reflection, proxy and interceptor frames mean, InvocationTargetException decoded, and how to cut noise.

OutOfMemoryError: Metaspace — Finding the Class Loader Leak

OutOfMemoryError: Metaspace is rarely fixed by a bigger MaxMetaspaceSize. How to find the class loader that won't die, plus the lab, the GC retries and the fix.

Wait and Notify in Java: The Rules That Stop the Hangs

wait() and notify() hang or corrupt data when the guard, the lock or the wakeup is wrong. Lost signals, stolen wakeups and notify vs notifyAll, run on JDK 21.

Sleep vs Wait in Java: Which One Releases the Lock?

On JDK 21, with the virtual-thread scheduler pinned to one carrier thread, four virtual threads that each do Thread.sleep(300) finish in 331 ms. Put the same sleep inside a synchronized block and the total is 1,219 ms. Swap the sleep for wait(300) inside the block

Java Memory Model Explained: Happens-Before in Practice

Why one thread can't see another thread's write. The Java Memory Model, reordering, and every happens-before rule explained with code you can actually test.

Java Condition Variables: await/signal vs wait/notify

A Java condition variable gives one lock several wait sets. How await() and signal() work, why one Condition hangs a buffer, and a bounded buffer done right.

How to Implement Comparable and Comparator in Java 21

Sort a warehouse stock list by SKU, name, price and expiry date with Comparable and Comparator on Java 21, then prove the order with 28 runnable checks.

Java Thread States Explained: What RUNNABLE Really Hides

Java thread states, each one demonstrated: what puts a thread in BLOCKED vs WAITING, why RUNNABLE can mean idle in a socket read, and how to read it in jstack.