Every time you configure a Java application's heap size, you are essentially making a trade-off spending more on infrastructure to improve performance metrics such as throughput or latency. Historically, this trade-off was visible when an undersized heap triggered long pauses, signaling a need for more resources. With modern collectors, however, pause duration and computational effort have become…
Imagine your company is managing a large-scale data processing system, and every second counts. You're constantly seeking ways to reduce latency and optimize performance. Now, consider the impact of speeding up thread monitoring on user CPU time by 20 times. The public standard in Linux for reading thread CPU time is the computational equivalent of printing a spreadsheet to paper, then scanning it…
A deep dive into JEP 500 and the Java Memory Model to understand the formal boundaries of 'final'. We examine JLS §17, unsafe publication, and why immutable fields can still appear mutable in concurrent environments.
Modern GCs often waste cycles moving objects that are reachable but effectively dead. We introduce Mark-Scavenge, a novel algorithm for ZGC that delays evacuation to let 'trash take itself out,' reducing dead object relocation by up to 91%.
In modern concurrent garbage collectors like ZGC, moving objects safely while the application is running requires significant CPU resources. But what if we could avoid moving objects that are about to die anyway? At OOPSLA ‘24, I presented Mark-Scavenge, a new approach to concurrent garbage collection. By implementing a “lazy relocation” algorithm, we can wait for trash to take itself out, red...