Improving the performance of stacktrace generation
Rémi Forax
forax at univ-mlv.fr
Sat Jul 7 16:57:45 PDT 2012
On 07/08/2012 12:50 AM, Charles Oliver Nutter wrote:
> On Saturday, July 7, 2012, Rémi Forax wrote:
>
> You can use Throwable.getStackTraceElement()
> which is package visible and OpenJDK specific but at least
> it will be faster for all VMs that uses OpenJDK.
>
> I'll certainly explore that to see if it improves the situation. If
> it's faster, it might be a way out in some circumstances.
>
> It seems like an official public API is needed here...
>
> Please never optimize warnings, they are here to bug users
>
> until they fix the thing. So they should be slow :)
>
>
> Yes, except when *everyone else* has faster warnings than you. Then
> you're just giving people another reason to not use your stuff.
>
> Granted, JRuby is now becoming far and away the fastest Ruby
> implementation for exactly the reasons that stack traces are slow, but
> often making 90% of the code 5x faster but 10% of the code 100x slower
> means people give up on you without bothering.
>
> Remember, I agree with you...but I also feel like this attitude has
> allowed stack trace generation to avoid optimization effort for a long
> time, and there *are* useful things you can do with an introspectable
> call stack.
Throwable.getStackTraceElement() let you walk the stack trace without
generating the whole stack trace,
in my opinion it's enough.
BTW, I also think you are responsible too for the cost of generating
stacktraces because the cost depends on the size of the stacktrace
and an AST interpreter is a big consumer of stack frames. I am guilty
too, PHP.reboot has the same issue and
I try to mitigate that by avoiding to have an helper methods in the
stacktrace of calls (not that easy without tailcall).
>
> - Charlie
Rémi
More information about the mlvm-dev
mailing list