As to your point about out of memory. Surely you _want_ the stacktrace if it all possible? You may not be able to satisfy an allocation request but still be able to construct an OutOfMemoryException. If you use the scheme above, constructing the backtrace shouldn't use much memory. If the stacktrace is printed, _lots_ of memory will be required but by this stage it's been caught, (or more likely printed as an uncaught exception) so lots of frames have been popped, enabling lots of memory to be collected.
If we can't construct an OutOfMemoryException, as a last resort, JamVM throws an "empty" OutOfMemoryException pre-allocated at VM startup.
Hope this helps,
Rob.
P.S. What is your system?
----Original Message Follows---- From: "David Holmes" <[EMAIL PROTECTED]> To: "Andrew Haley" <[EMAIL PROTECTED]> CC: classpath <[EMAIL PROTECTED]> Subject: RE: Query on stacktrace management logic Date: Sat, 28 Feb 2004 10:59:01 +1000
Andrew Haley wrote: > Well consider what happens in a VM. VMThrowable.fillInStackTrace() is > very fast -- it's just a chain of addresses. > VMThrowable.getStackTrace() is very slow, because it has to convert > all those addresses into StackTraceElements. I suspect that you can > get the trace for the whole stack in less time than it takes to create > a single StackTraceElement. For this reason, the vmState is stored > and lazily converted to a StackTraceElement[].
Thanks - I see now. Unfortunately in our system (at present) this is not the case. But now I have an idea of how to change that.
I still need a hook to not get the stacktrace filled in for OutOfMemoryError - though perhaps I can do something without requiring allocation using a different approach.
Thanks again.
David Holmes
_______________________________________________ Classpath mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/classpath
_________________________________________________________________ Express yourself with cool new emoticons http://www.msn.co.uk/specials/myemo
_______________________________________________ Classpath mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/classpath