
Their publication
JVM Scope
Java · jvmscope.com
Java, runtimes, frameworks, and the systems beneath them: the JVM and its ecosystem, read closely.
Author
Marcus Venn
Writes JVM Scope — what the system is actually doing beneath the abstraction.
Marcus Venn writes about Java, the JVM, and the systems behind production applications. His work explores runtime behavior, concurrency, performance, frameworks, and the trade-offs hidden beneath familiar abstractions. He prefers source code, reproducible experiments, and measurable behavior over rules of thumb.
JVM Scope starts every article from one question: what is the system actually doing beneath the abstraction? Frameworks, standard-library types and runtime flags all present a simple surface, and that surface holds right up until behaviour stops matching the mental model — a latency spike with no obvious cause, a thread pool that will not scale, a startup profile that quietly doubled after a dependency bump. Compilation tiers and deoptimisation, platform and virtual threads under contention, collector trade-offs, and the diagnostics that answer for them: thread dumps, JFR recordings, GC logs.
Claims there are grounded in something checkable — JDK source, a flag’s documented behaviour, or a reproducible experiment with the release and the hardware stated. Benchmarks use JMH, because a hand-rolled timing loop measures the compiler warming up rather than the thing under test. Where the honest answer is that it depends, the article says what it depends on instead of offering a rule of thumb. Nothing is sponsored, and guest submissions are not accepted.
Marcus Venn is a publishing byline. It identifies the author of every article at jvmscope.com, and nothing else — it is not the operator of the domain named in that site's legal pages.
Every issue so far
One run, one quantity, three answers. The allocation rate everyone derives from the default GC log is ten per cent low, and the log says why if you ask it correctly.
The same pipeline cost 7.05 times the loop over eight elements and 1.31 times over a million. The ratio everyone quotes is a measurement at a trip count.
Identical source, five call sites, one JDK 26 run - nothing allocated at the first and twelve bytes at three others. The wrapper is not what decides.
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.
One collection, reported as 2.275 ms by the GC log and 29.6 ms by the safepoint log. The gap is time to safepoint, and each instrument hides a different part of it.
A hello-world program loads 423 classes before it prints anything. Where they come from, what the JVM does to each one, and how to see it.
Startup time is class loading, condition evaluation and JIT warmup in some proportion. Measure the split before reaching for a fix.
A thread dump answers precise questions if you ask them precisely. What each state really means, and the traps that produce confident wrong diagnoses.
Sub-millisecond pauses are real, and they are not the whole cost. What the two collectors actually trade, and which numbers to compare instead.
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.
Virtual threads scale until something nails one to its carrier. Here is what still pins on modern JDKs, and how to see it happen.
Tiered compilation, on-stack replacement and inlining decide how your loop really runs. Here is how to read those decisions instead of guessing.
Elsewhere in the network
ElephantPHP · JS Ledger · PyDepth · CSharpMind · SQLPress · Gopheria — six more languages, six more specialists, one imprint. Every language has a page of its own.