As some of you may be aware, I've been doing benchmarking of servers
with a mind to improving gcj performance.
I've recently come across a situation where stack traces greatly
slowed down an application. Basically, this all comes down to an
interaction between the way that loggers work and the way we do stack
traces. We're using addr2line to get the line number and filename,
but this leads to a huge number of addr2line process being spawned.
In the past we have considered building a reader for DWARF debug info
into libgcj, but this may not help as much as we imagine: a perusal of
the profile data for addr2line reveals that much of the CPU time is in
libbfd itself -- the big effort isn't just spawning addr2line
processes, it's actually doing the work of reading the debug info.
And all of this is often supremely pointless in Fedora, where many of
the gcj libraries don't have any debuginfo to read.
The effect of all this is dramatic: running a test load in JOnAS is
38m18s with addr2line, and
22m49s without.