Core Java
-

Tail Call Optimization: Why the JVM Doesn’t Do It
A bytecode-level look at why recursive calls can’t quietly collapse their stack frames on the JVM, and why Scheme and…
Read More » -

The Observer Effect in JVM Profiling
Attach a profiler to see what the JIT is really doing, and you’ve just changed what the JIT does. On…
Read More » -

Understanding Ahead-of-Time (AOT) Caching in Java
Java applications have traditionally relied heavily on runtime class loading, linking, interpretation, profiling, and Just-in-Time (JIT) compilation. These mechanisms provide…
Read More » -

G1 Isn’t the Only Default That Changed: A Java 25→26 Migration Reality Check
The real driver behind this migration isn’t curiosity, it’s a September 2026 licensing cliff. And what actually breaks isn’t quite…
Read More » -

Array Covariance vs. Generic Invariance
Java’s type system disagrees with itself about one question: if String is an Object, is String[] an Object[]? Arrays say…
Read More » -

Algebraic Data Types and Pattern Matching, Compared
Java, Rust, Scala, and Haskell all let you say “a Shape is exactly a Circle, a Square, or a Triangle,…
Read More » -

Consistent Overflow: Two’s Complement and Modular Arithmetic
Java promises that Integer.MAX_VALUE + 1 always equals Integer.MIN_VALUE. That promise is exactly what let a bug hide inside the…
Read More » -

Type Erasure and What It Actually Costs
List<String> and List<Integer> are the exact same class once the JVM gets involved. Here’s why Java made that trade, and…
Read More » -

Project Leyden and AOT Caching: Is “Fast Startup” Actually Solved Now?
Java 26 just extended AOT caching to ZGC. Before you reach for GraalVM Native Image again, it’s worth asking what…
Read More »
