I am compiling links and notes to papers about JIT bytecode techniques. Eventually, this collection will become a full-fledged review paper.

Tracing JIT compilers

http://lambda-the-ultimate.org/node/3851#comment-57761

Good discussion and links here. Highlights: LuaJit, Dynamo

Mozilla JagerMonkey

http://hacks.mozilla.org/2010/03/a-quick-note-on-javascript-engine-components/

Interesting hybrid approach.

Equality Saturation

http://lambda-the-ultimate.org/node/3220

Not extremely JIT related, but interesting nonetheless. Instead of applying peephole optimizations, a model is constructed which represents all programs which do the same thing as the input. Then the problem is treated as an actual comb.opt problem and the answer is searched/solved for.

Dynamo

http://arstechnica.com/reviews/1q00/dynamo/dynamo-1.html

Dynamo is a JIT translator from a native code to itself, optimizing in the process. Most gains are probably from turning complicated control flow into straight-line code. Transmeta Crusoe was a hardware-accelerated version of a similar concept.