John Cowan wrote:
> On Tue, Apr 22, 2008 at 2:41 PM, Jon Harrop <[EMAIL PROTECTED]> wrote:
> 
>>  > 2) you are allocating a new exception every time; the optimization
>>  > described here [1] works only if the exception is pre-allocated.
>>  > [1] http://blogs.sun.com/jrose/entry/longjumps_considered_inexpensive
>>
>>  I think that is not thread safe. Specifically, when the branch conveys
>>  information (passed as arguments using a tail call, or embedded in the
>>  exception) then you must use a locally allocated exception, right?
> 
> Yes, you must.   However, what makes allocating an exception expensive
> is the fillInStack method, which has to walk the JVM stack.  If you
> override that in your exception class with a do-nothing method, then
> locally allocating exceptions is very cheap.

JRuby uses this technique since we frequently have flow-control 
exceptions that contain different state. It's fast...very very fast. The 
stack trace is basically *all* the cost, but John Rose's version also 
eliminates the object allocation cost. For some of our exceptions we do 
have a single instance.

- Charlie

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "JVM 
Languages" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/jvm-languages?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to