Series · 4 parts

Reading the runtime

Articles about the signals a running JVM already emits, and how to read them without guessing.

20 min read

Start with part 1
  1. Part 01 · Runtime

    What the JIT Actually Does to Your Hot Loop

    Tiered compilation, on-stack replacement and inlining decide how your loop really runs. Here is how to read those decisions instead of guessing.

    6 min read

  2. Part 02 · Runtime

    Escape Analysis and the Allocation That Never Happened

    C2 can delete an object entirely by proving it never escapes. Here is when that works, when it silently stops, and how to measure the difference.

    4 min read

  3. Part 03 · Diagnostics

    Reading a Thread Dump Without Guessing

    A thread dump answers precise questions if you ask them precisely. What each state really means, and the traps that produce confident wrong diagnoses.

    5 min read

  4. Part 04 · Diagnostics

    JFR: The Events You Actually Need

    Sixty seconds of default settings produced 4.3 MB, three quarters of it one event type, and none of it answered whether the application was lock-contended.

    5 min read

Other series

All series
  • 2 parts

    The cost of an abstraction

    What a wrapper, a pipeline or a proxy costs is a property of the call site, not of the abstraction. Five articles measuring the difference.

  • In preparation

    The JVM in a container

    What the runtime detects about a cgroup, the defaults it derives from that, and the footprint those defaults produce.

  • In preparation

    Threads in production

    Structured concurrency, scoped values, pool sizing and backpressure, in the request path rather than in the specification.

Search the site

Arrow keys to move, Enter to open.