On Dec 29, 2007 3:54 PM, Ola Bini <[EMAIL PROTECTED]> wrote:

> The problem
> is that they're all using things that require you to manipulate the
> stack in some way. setjmp and longjmp can of course be duplicated in a
> manner by using exceptions,

Correct.

> but the rest of the stack manipulation doesn't seem possible.

No other tricks are required!  Since only pointers and primitives,
never objects, are allocated on the Java stack, no object eviction is
needed, so you just keep on calling and never returning (hence the
allusion to "MTA Charlie") and finally throw the exception to kill the
stack, which is now 100% garbage.

(If there can be plain Java code mixed into the call stack, there is
some danger that someone will do a "catch(Throwable e)" or
"catch(RuntimeException e)" and screw the mechanism.)

Kelly Nawrocke writes:

> I had some papers on A-Normal form and trampolining on the JVM

ANF and CPS are of course equivalent, so it's hardly surprising that
what you can do with one, you can do with the other.

> They found that
> returning to the trampoline loop every N frames (~40 was optimal at
> the time) was the most efficient.

This is essentially what I described in my last post -- throw the
exception every N calls.  Of course the size of N depends on how much
stack you allocate to your JVM at startup, which depends on how you
are using whatever physical memory you have.   After some experiments
with trying to set the stack size experimentally at system
configuration time, current versions of Chicken just set an arbitrary
C-stack size (128 KB, I think) which can be overridden either at
system configuration time or at run time.

The exception should override the fillInStackTrace method, which is
what costs the most time in throwing an exception.

-- 
GMail doesn't have rotating .sigs, but you can see mine at
http://www.ccil.org/~cowan/signatures

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "JVM 
Languages" group.
To post to this group, send email to jvm-languages@googlegroups.com
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