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.
Series · 4 parts
Articles about the signals a running JVM already emits, and how to read them without guessing.
Start with part 1Part 01 · Runtime
Tiered compilation, on-stack replacement and inlining decide how your loop really runs. Here is how to read those decisions instead of guessing.
Part 02 · Runtime
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.
Part 03 · Diagnostics
A thread dump answers precise questions if you ask them precisely. What each state really means, and the traps that produce confident wrong diagnoses.
Part 04 · Diagnostics
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.
2 parts
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
What the runtime detects about a cgroup, the defaults it derives from that, and the footprint those defaults produce.
In preparation
Structured concurrency, scoped values, pool sizing and backpressure, in the request path rather than in the specification.