I'm just posting this in case anyone finds this useful.
Here's the abstract for the paper on trace trees entitled "One Method
at a Time is Quite a Waste of Time":
Most just-in-time compilers for object-oriented languages operate at
the granularity of methods. Unfortunately, even “hot” methods often
code paths. As a consequence, just-in-time compilers waste time
that will be executed only rarely, if at all. We discuss an
alternative approach in
which only truly “hot” code is ever compiled.
Just a disclaimer, I am not knowledgeable about trace trees, VMs,
compilers, etc. I only read Steve Yegge's post on dynamic languages,
and read a couple of papers linked from that article about type
inference and trace trees.
It would have been nice if I have forked Rubinius and implemented a
code to demo trace trees but I'm not really at that level yet. Right
now, I'm just at the stage of looking for a good book on compilers so
that I can contribute to Rubinius in the future.