On Jul 7, 2008, at 3:42 AM, Steven Shaw wrote:
2008/6/24 John Rose <[EMAIL PROTECTED]>:
It would be great if we had really lightweight continuations, with
a JVM scheduler (Scheme calls them engines, I think) which keeps
running the next one. The part I can't see yet is how to make
stack-based and heap-based activation records play together
efficiently. (Maybe you JIT two versions of every method, with
inlining to remove overheads as usual?)
Is it disastrous for performance to heap allocated all activations?
It would be a long, hard job to make up the performance loss. Not
all JVMs (especially the small ones) could follow.
The immediate reuse of memory that stacks enable is very cache-
friendly, and we have to be friends with caches these days.
Perhaps it could be an JVM option. Perhaps activations could be
abstractly considered "heap allocated" and have the JVM stack
allocated when possible.
If you could get the escape events to happen infrequently, you could
do this, with stack-to-heap copying to occur only when required. In
such a design the eager allocation (if any) could be reduced to a one-
word handle object. Stack frames involving generators or closures
could skip directly into the heap. That suggests a "try to keep me
on the stack" bit in the bytecode.
You might want to combine groups of tightly-coupled methods into
stacklets served by one allocation.
A system which bounces things between stack and heap probably
requires lots of global analysis. To make that part of the JVM
architecture probably requires a new set of verifiable assertions
which a low-end JVM could use directly. (It would verify the
assertions transmitted in the bytecodes, rather than re-derive them
from scratch.) I don't think such a thing has been investigated yet.
Is the much research in this area?
I'm not aware of anything related to the JVM, but there's some good
fundamental stuff by Appel and Shao:
http://flint.cs.yale.edu/flint/publications/stack.html
-- John
_______________________________________________
mlvm-dev mailing list
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev