|
|
|
Back to newsletter 294 contents
All the official JVM supported sampling mechanisms happen at safepoints, where the JVM has moved threads to a well defined state (a state "safe" to ask about because it's defined and consistent). This lead many profilers to having safepoint biases - that's the tendency to miss out on things that happen when the threads are not at safepoints. This leads to these types of profilers giving misleading profiles in a variety of situations. All this has long been known, and many profilers addressed this shortcoming by avoiding safepoint bias.
Historically profilers that wanted to avoid safepoint bias used AsyncGetCallTrace - a non-standard internal JVM capability that's had multiple bugs over the years and has never been fully stable. AsyncGetCallTrace has never been an official JVM API and is prone to crash the JVM. There was an attempt (JEP 435) to provide a supported equivalent API, but that didn't succeed. Instead, the latest development is that profilers are simply removing the AsyncGetCallTrace dependency, and doing the equivalent work directly. For example both async-profiler and eBPF profilers have implemented their own stack walking mechanisms. This actually gives more information with greater stability, so is better in every way - but it's taken a while to develop. It's pretty interesting how profilers continue to innovate!
Now on to all the usual newsletter list of links, tips, tools, news and talks, and as usual I've extracted all the tips into this month's tips page.
Java performance tuning related news
Java performance tuning related tools
Back to newsletter 294 contents