Make sure to check out the references. I especially like "Ertl, M. A. and D. Gregg,
The structure and performance of efficient interpreters, Journal of Instruction-Level Parallelism
5 (2003)"
Those techniques are a relatively niche thing. People don't write bytecode interpreters daily. Couple of months ago I wrote a few articles on the topic. Unfortunately, they are in Russian. I'll probably translate 'em at some but for now...
the repo and performance measurements are on Github[1]. It includes a couple of dispatch techniques, register caching, etc.
Make sure to check out the references. I especially like "Ertl, M. A. and D. Gregg, The structure and performance of efficient interpreters, Journal of Instruction-Level Parallelism 5 (2003)"